ABSTRACT:
Animal movements are often defined using the home range concept. Consequently, home ranges are determined by temporal, spatial, and individual-level processes. Within the environment, one of the key factors influencing an animal’s range and how it uses the environment is that of resources. Alterations to the environment that affect resource distribution and availability can have profound consequences on an animal’s spatial patterns. One of the best examples of this is that of golf courses. Certain environmental modifications exhibited by some human altered environments can have positive effects on certain wildlife species by altering their movement patterns and foraging efforts. We analyzed data collected from 22 Gila Monsters Heloderma suspectum at a subsidized environment in Arizona from 2007 to 2013 and 15 Gila Monsters from a non-subsidized environment from 2000 to 2002. We performed both kernel density estimation and minimum convex polygons for comparability purposes. After adjusting area estimates for sex, number of fixes, and year, males in the subsidized environment had an average overall area of 13.6 ha while the females had an area of 8.3 ha. In the unsubsidized environment, males had an average overall area of 43.2 ha while females had an area of 23.6 ha. Gila Monsters between the two environments also exhibited seasonal differences, primarily in the dry and monsoon seasons. There were also differences in home range overlap within and between sexes. In the subsidized population, there was very little male-male overlap with only two occurances, more female-female overlap and male-female overlap was increased. Male home ranges often overlapped several female home ranges. This suggests that Gila monster home ranges may be smaller in subsidized resource environments than those of un-subsidized environments due to increases in available resources.
Gila Monsters Heloderma suspectum


Figure 1 | Stone Canyon Golf Club, located in Oro Valley, Arizona on the northern edge of Tucson.

Overall Yearly Home Ranges (MCP)
Summary of home range size.
Table 1 | Pooled overall home ranges of Gila Monsters at Owl Head Buttes and Stone Canyon Golf Club. Both 100% and 95% MCPs were calculated between both populations.
Table: Home range sizes of Stone Canyon and Owl head Buttes using both 95 percent and 100 percent MCPs.
Year Gila Sex Environment Home_Range_100mcp N100 Home_Range_95mcp N95
----- ----- ------- -------------- ------------------ ----- ----------------- ----
2000 1 female nonsubsidized 25.20 42 23.00 38
_ 2 male nonsubsidized 28.70 125 24.50 112
_ 3 male nonsubsidized 82.70 89 68.40 78
_ 4 male nonsubsidized 55.60 80 40.50 73
2001 1 female nonsubsidized 20.10 26 NA NA
_ 2 male nonsubsidized 23.50 10 NA NA
_ 3 male nonsubsidized 60.10 18 NA NA
_ 4 male nonsubsidized 24.40 21 NA NA
_ 10 male nonsubsidized 28.50 14 NA NA
_ 11 male nonsubsidized 10.60 22 NA NA
_ 12 male nonsubsidized 23.60 7 NA NA
_ 13 female nonsubsidized 8.90 9 NA NA
_ 15 female nonsubsidized 13.00 11 NA NA
_ 50 female nonsubsidized 21.00 11 NA NA
_ 51 female nonsubsidized 7.10 8 NA NA
2002 2 male nonsubsidized 66.20 38 40.00 37
_ 4 male nonsubsidized 73.10 76 55.50 73
_ 10 male nonsubsidized 39.50 111 33.30 105
_ 11 male nonsubsidized 39.30 92 31.90 88
_ 12 male nonsubsidized 49.50 66 41.50 63
_ 13 female nonsubsidized 26.30 101 23.70 96
_ 15 female nonsubsidized 39.20 98 21.30 94
_ 17 female nonsubsidized 47.60 106 29.10 101
_ 50 female nonsubsidized 15.80 68 14.10 66
_ 51 female nonsubsidized 18.50 57 12.40 57
2007 F104 female subsidized 3.37 18 3.37 19
_ F114 female subsidized 2.51 8 0.58 7
_ F36 female subsidized 5.05 20 3.49 19
_ F66 female subsidized 10.23 22 5.56 20
_ M112 male subsidized 12.51 13 12.51 12
_ M14 male subsidized 4.66 15 3.87 14
2008 F104 female subsidized 4.97 53 3.47 50
_ F114 female subsidized 11.96 52 9.38 49
_ F135 female subsidized 4.07 16 1.58 15
_ F137 female subsidized 5.98 15 5.75 14
_ F36 female subsidized 9.73 54 7.55 51
_ F66 female subsidized 11.29 51 9.95 48
_ M119 male subsidized 25.01 58 20.23 55
2009 F104 female subsidized 7.45 64 7.25 62
_ F114 female subsidized 11.46 52 8.28 49
_ F135 female subsidized 6.21 62 5.47 58
_ F137 female subsidized 6.09 35 5.68 33
_ F147 female subsidized 17.90 50 14.04 48
_ F36 female subsidized 7.48 62 5.83 60
_ F66 female subsidized 12.20 67 11.01 66
_ M112 female subsidized 7.89 71 1.73 70
_ M119 male subsidized 22.62 18 16.37 16
_ M69 male subsidized 1.91 69 1.91 69
_ F146 female subsidized 9.94 20 8.49 17
2010 F114 female subsidized 9.65 44 8.30 41
_ F137 female subsidized 6.32 45 5.26 42
_ F147 female subsidized 16.65 36 14.75 34
_ F200 female subsidized 5.36 34 5.23 33
_ F214 female subsidized 7.38 27 3.01 25
_ F36 female subsidized 38.81 50 12.16 47
_ F66 female subsidized 28.96 52 16.22 49
_ M112 male subsidized 20.46 26 14.41 24
_ M119 male subsidized 17.46 31 9.70 29
_ M69 male subsidized 13.85 30 10.75 28
2011 F114 female subsidized 5.91 22 3.30 20
_ F137 female subsidized 4.80 33 4.28 31
_ F147 female subsidized 19.44 24 12.90 22
_ F200 female subsidized 8.35 28 7.66 27
_ F214 female subsidized 6.61 22 5.66 21
_ F252 female subsidized 3.09 17 1.60 16
_ F36 female subsidized 11.93 23 10.95 21
_ F66 female subsidized 5.72 5 0.66 4
_ M14 male subsidized 4.48 13 3.84 12
_ M215 male subsidized 11.47 16 11.47 15
_ M255 male subsidized 5.85 16 5.59 15
2012 F114 female subsidized 10.17 54 7.15 51
_ F137 female subsidized 2.06 13 1.36 12
_ F147 female subsidized 17.64 52 16.75 49
_ F252 female subsidized 5.19 53 3.63 50
_ F36 female subsidized 10.34 52 10.30 49
_ M14 male subsidized 4.42 13 3.77 12
_ M215 male subsidized 11.04 21 9.85 20
_ M255 male subsidized 8.21 13 5.39 12
2013 F114 female subsidized 1.16 7 0.28 6
_ F147 female subsidized 0.31 6 0.00 5
_ F252 female subsidized NA 4 NA NA
_ F36 female subsidized 0.13 6 0.00 5
Overall combined mean:
Gila Monster Home Range Sizes at Stone Canyon vs. Owl Head Buttes.

Table 2 | Group 100% MCP home range means of raw data of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.
Table: Group Means of Overall 100% MCP Home Ranges
Environment Sex N Home_Range_100mcp sd se ci
-------------- ------- --- ------------------ ---------- --------- ----------
nonsubsidized female 11 22.063636 12.287414 3.704795 8.254797
nonsubsidized male 14 43.235714 21.672372 5.792185 12.513255
subsidized female 38 9.839474 6.889003 1.117544 2.264359
subsidized male 16 11.943125 6.907866 1.726966 3.680942
Table 3 | Group 95% MCP home range means of raw data of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.
Table: Group Means of Overall 95% MCP Home
Ranges
Environment Sex N Home_Range_95mcp sd se ci
-------------- ------- --- ----------------- ---------- --------- ----------
nonsubsidized female 6 20.600000 6.286493 2.566450 6.597270
nonsubsidized male 8 41.950000 13.987954 4.945489 11.694222
subsidized female 38 7.132895 4.280606 0.694406 1.407000
subsidized male 16 9.155000 5.071167 1.267792 2.702234
Gila Monster Yearly Home Range Shifts of 100% MCPs.

Repeated measures ANOVA for Yearly Home Ranges.
Repeated Measure ANOVA for 100% MCP overall home ranges
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_100mcp ~ Environment + Year + Sex + N100 + Environment *
Sex + (1 | Gila)
Data: year
REML criterion at convergence: 573.1
Scaled residuals:
Min 1Q Median 3Q Max
-2.78427 -0.39613 -0.04158 0.28298 3.08889
Random effects:
Groups Name Variance Std.Dev.
Gila (Intercept) 29.58 5.439
Residual 82.45 9.080
Number of obs: 79, groups: Gila, 30
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -1.025e+03 1.675e+03 7.162e+01 -0.612 0.542474
Environmentsubsidized -1.526e+01 8.155e+00 6.684e+01 -1.871 0.065666 .
Year 5.186e-01 8.368e-01 7.163e+01 0.620 0.537434
Sexmale 1.966e+01 4.855e+00 2.503e+01 4.049 0.000436 ***
N100 1.938e-01 4.152e-02 5.491e+01 4.669 1.99e-05 ***
Environmentsubsidized:Sexmale -1.430e+01 6.154e+00 2.558e+01 -2.323 0.028377 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) Envrnm Year Sexmal N100
Envrnmntsbs 0.855
Year -1.000 -0.856
Sexmale -0.043 0.280 0.041
N100 0.062 0.120 -0.064 -0.041
Envrnmnts:S 0.025 -0.316 -0.024 -0.792 0.119
ANOVA Table: 100% MCP
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Environment 688.97 688.97 1 71.486 8.3567 0.0050859 **
Year 31.66 31.66 1 71.627 0.3840 0.5374340
Sex 1375.22 1375.22 1 24.656 16.6803 0.0004079 ***
N100 1797.13 1797.13 1 54.913 21.7978 1.994e-05 ***
Environment:Sex 445.09 445.09 1 25.582 5.3986 0.0283770 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Repeated Measure ANOVA for 95% MCP overall home ranges
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_95mcp ~ Environment + Year + Sex + N100 + Environment *
Sex + (1 | Gila)
Data: year
REML criterion at convergence: 416.6
Scaled residuals:
Min 1Q Median 3Q Max
-2.64995 -0.31879 -0.01748 0.34209 2.09888
Random effects:
Groups Name Variance Std.Dev.
Gila (Intercept) 41.27 6.424
Residual 14.75 3.840
Number of obs: 68, groups: Gila, 30
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -780.82886 819.18729 39.32621 -0.953 0.34632
Environmentsubsidized -17.09189 5.06395 58.10150 -3.375 0.00132 **
Year 0.39919 0.40924 39.32617 0.975 0.33531
Sexmale 21.76015 4.27723 25.46188 5.087 2.83e-05 ***
N100 0.03035 0.03090 39.53363 0.982 0.33201
Environmentsubsidized:Sexmale -16.09431 5.11938 30.66852 -3.144 0.00369 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) Envrnm Year Sexmal N100
Envrnmntsbs 0.648
Year -1.000 -0.651
Sexmale -0.036 0.396 0.033
N100 -0.009 0.261 0.006 -0.052
Envrnmnts:S 0.012 -0.436 -0.010 -0.838 0.098
ANOVA Table: 95% MCP
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Environment 446.03 446.03 1 61.925 30.2487 7.669e-07 ***
Year 14.03 14.03 1 39.326 0.9515 0.335306
Sex 426.44 426.44 1 29.915 28.9198 8.086e-06 ***
N100 14.22 14.22 1 39.534 0.9646 0.332015
Environment:Sex 145.74 145.74 1 30.669 9.8835 0.003687 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Table 4. Directional means of home range after being adjusted for year, sex and sample size.
Table: Adjusted Group Means of Overall Home Ranges
Environment Sex lsmean SE df lower.CL upper.CL
-------------- ------- ---------- --------- --------- ---------- ---------
nonsubsidized female 23.587658 6.003405 66.84223 11.604291 35.57102
subsidized female 8.325735 3.229685 46.63307 1.827097 14.82437
nonsubsidized male 43.244461 6.049597 66.28277 31.167013 55.32191
subsidized male 13.683483 3.887262 49.21098 5.872585 21.49438
Post-Hoc comparisons between sexes and environment:
$emmeans
Environment = nonsubsidized:
Sex emmean SE df lower.CL upper.CL
female 23.59 6.00 66.8 11.60 35.6
male 43.24 6.05 66.3 31.17 55.3
Environment = subsidized:
Sex emmean SE df lower.CL upper.CL
female 8.33 3.23 46.6 1.83 14.8
male 13.68 3.89 49.2 5.87 21.5
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Environment = nonsubsidized:
contrast estimate SE df t.ratio p.value
female - male -19.66 4.86 31.6 -4.044 0.0003
Environment = subsidized:
contrast estimate SE df t.ratio p.value
female - male -5.36 3.81 31.8 -1.405 0.1697
Graphical Comparisons of Sex Within Each Environment:

Figure 6 | Pairwise comparisons of home range between sexes within each environment. If red arrows overlap those of others, then there is no significant statistical difference.
$emmeans
Sex = female:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 23.59 6.00 66.8 11.60 35.6
subsidized 8.33 3.23 46.6 1.83 14.8
Sex = male:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 43.24 6.05 66.3 31.17 55.3
subsidized 13.68 3.89 49.2 5.87 21.5
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Sex = female:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 15.3 8.31 68.7 1.837 0.0705
Sex = male:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 29.6 8.69 68.3 3.403 0.0011
Graphical Comparisons of Sex between the two populations:

Figure 7 | Pairwise comparisons of sex between environments. If red arrows overlap those of others, then there is no significant statistical difference.
At Stone Canyon, male yearly home ranges ranged from 1.91 - 25.1 ha, with a mean of 11.8 ± 1.7 S.E. ha (100% MCP), 9.2 ± 1.3 S.E. Ha (95% MCP). Female home ranges ranged from 2.06 – 38.81 ha and a mean of 9.8 ± 1.1 S.E. ha (100% MCP), 7.1 ± 0.7 S.E. ha (95% MCP). Male Gila Monsters at Owl head Buttes had home ranges that ranged from 10.6 – 82.7 ha with a mean of 43.2 ± 5.7 S.E. ha (100% MCP), 41.9 ± 4.9 S.E. ha (95% MCP). Female home ranges ranged from 7.1 – 47.6 with a mean of 22.0 ± 3.7 S.E. ha (100% MCP), 20.6 ± 2.5 S.E. ha (95% MCP). In the analyses of both populations, year had no effect on home range sizes (F = 0.38, P = 0.54), while there was a detected significant difference in home ranges between the two populations (F = 8.35, P = 0.005), as well as sex (F = 16.68, P = 0.0004). Post-Hoc analyses between sexes indicated that there was a significant difference in male home ranges between the two environments (df = 68.3, P = 0.001). There was a slight difference of female home ranges between the two environments, however it was not statistically significant (df = 68.7, P = 0.07). At stone canyon there was no major difference between male and female home ranges (df = 31.8, P = 0.16) with male home range being only 3% larger than females. Males at Owl Head Buttes had a 65% larger home range than did females, and was statistically significant (df = 31.3, P = 0.0003). Interestingly, males at Stone Canyon had smaller home ranges than did the females at Owl Head Buttes (Table x) When using 95% MCPs, male home ranges reduced by 25% and female range by 31%. At Owl Head Buttes, Gila Monsters showed a similar behavior with male home ranges reduced by 20% and female ranges reduced by 26% using 95% MCPs.
Overall Yearly Home Ranges (KDE)
Home range estimation on the Stone Canyon Gila Monsters using 95% KDEs with href bandwidth produced male home ranges ranging from 14.5 – 55.3 ha with a mean of 35.0 ± 3.3 S.E. ha. Female home ranges ranged from 10.1 – 47.8 ha with a mean of 22.9 ± 1.8 S.E. KDE estimates for male and female home ranges were 96% and 80% larger than MCP estimates. Repeated Measures analysis of KDEs suggested that there was a small significant difference between male and female home ranges at Stone Canyon (F = 5.56, P = 0.009). Year did not have an effect on home ranges (F = 0.57, P = 0.45).
Table: Yearly KDE Home Ranges
Year Gila Sex Environment Home_Range_95kde N Home_Range_50kde N50
----- ----- ------- ------------ ----------------- --- ----------------- ----
2007 F104 female subsidized 13.84 18 3.69 15
NA F36 female subsidized 16.51 20 4.26 16
NA F66 female subsidized 32.31 22 7.86 17
NA M67 male subsidized NA 16 8.97 12
NA M112 male subsidized NA 13 15.42 11
NA M14 male subsidized 14.52 15 3.76 12
NA M67 male subsidized 35.47 14 8.97 10
2008 F104 female subsidized 13.22 53 2.61 42
NA F114 female subsidized 20.55 52 3.68 38
NA F135 female subsidized 11.36 16 2.19 12
NA F137 female subsidized 20.51 15 5.61 14
NA F36 female subsidized 18.89 54 4.98 41
NA F66 female subsidized 39.30 50 9.97 43
NA M119 male subsidized 47.65 58 12.18 43
2009 F104 female subsidized 19.11 64 4.63 14
NA F114 female subsidized 20.34 52 4.08 43
NA F135 female subsidized 14.43 62 4.43 50
NA F137 female subsidized 16.94 35 4.99 32
NA F147 female subsidized 39.67 62 9.06 52
NA F36 female subsidized 13.96 67 3.20 52
NA F66 female subsidized 25.90 71 6.35 69
NA M112 female subsidized NA 18 14.27 17
NA M119 male subsidized 49.53 69 12.55 61
NA M69 male subsidized NA NA NA NA
NA F146 female subsidized 20.17 43 3.97 31
2010 F114 female subsidized 21.06 44 6.08 35
NA F137 female subsidized 13.24 45 3.33 13
NA F147 female subsidized 34.73 36 7.13 28
NA F200 female subsidized 20.37 34 4.09 25
NA F214 female subsidized 14.97 27 3.56 24
NA F36 female subsidized 47.49 50 9.73 37
NA F66 female subsidized 47.77 52 7.26 33
NA M112 male subsidized 55.25 26 8.60 21
NA M119 male subsidized 33.88 31 7.14 22
NA M69 male subsidized 37.45 30 10.49 22
NA F146 female subsidized 33.84 9 8.39 7
2011 F114 female subsidized 13.82 22 2.66 17
NA F137 female subsidized 12.12 33 2.65 25
NA F147 female subsidized 43.80 24 9.66 17
NA F200 female subsidized 23.96 28 6.86 26
NA F214 female subsidized 23.39 22 5.91 18
NA F252 female subsidized 8.55 17 1.94 14
NA F36 female subsidized 34.90 23 8.81 20
NA M14 male subsidized 20.36 12 5.27 10
NA M215 male subsidized 46.26 16 11.74 15
NA M255 male subsidized 30.10 16 8.25 15
2012 F114 female subsidized 21.04 54 5.41 45
NA F137 female subsidized 7.87 13 1.24 10
NA F147 female subsidized 32.98 52 7.74 36
NA F252 female subsidized 10.09 53 1.83 39
NA F36 female subsidized 27.59 52 7.67 39
NA M14 male subsidized 24.02 13 6.49 10
NA M215 male subsidized 28.52 21 7.31 15
NA M255 male subsidized 32.03 13 8.27 11
Table | Raw Group 95% KDE home range means of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.
Table: Raw Group Means of Overall 95% KDE Home
Ranges
Sex N Home_Range_95kde sd se ci
------- --- ----------------- --------- --------- ---------
female 37 22.98892 11.04627 1.815996 3.683010
male 13 35.00308 12.05755 3.344161 7.286302
Repeated measures ANOVA for KDE Home Ranges.
Repeated Measure ANOVA for 95% KDE overall home ranges
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_95kde ~ Year + Sex + N + (1 | Gila)
Data: sub
REML criterion at convergence: 360.2
Scaled residuals:
Min 1Q Median 3Q Max
-1.6803 -0.5078 -0.0558 0.3847 2.7368
Random effects:
Groups Name Variance Std.Dev.
Gila (Intercept) 74.64 8.639
Residual 58.06 7.620
Number of obs: 50, groups: Gila, 18
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -1.257e+03 1.684e+03 3.999e+01 -0.746 0.45978
Year 6.356e-01 8.380e-01 4.000e+01 0.759 0.45258
Sexmale 1.475e+01 5.041e+00 1.771e+01 2.926 0.00913 **
N 4.485e-02 7.364e-02 3.747e+01 0.609 0.54615
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) Year Sexmal
Year -1.000
Sexmale 0.039 -0.040
N 0.015 -0.017 0.193
ANOVA Table for 95% KDE (subsidized)
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Year 33.40 33.40 1 39.996 0.5754 0.452584
Sex 497.09 497.09 1 17.713 8.5619 0.009133 **
N 21.54 21.54 1 37.466 0.3710 0.546150
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Repeated Measure ANOVA for 50% KDE overall home ranges
Error in eval(predvars, data, env) : object 'Home_Range_50kde' not found
ANOVA Table for 50% KDE (subsidized)

Table | Directional means of KDE home ranges after being adjusted for year, sex and sample size.
Table: Adjusted KDE Group Means of Overall Home Ranges
Sex lsmean SE df lower.CL upper.CL
------- --------- --------- --------- --------- ---------
female 22.04260 2.940117 13.90396 15.73259 28.35262
male 36.79148 4.083271 19.59818 28.26272 45.32025
Seasonal Home Range
Seasonal Home Range.
Home range analysis broken down by five seasons; Emergence, Dry, Monsoon, Post Monsoon. The start of emergence was defined by when movement patterns increased from none/minimal to the start of high activity. Effort was taken to match as closely as possible to the Owl Head Buttes emergence date interval. Monsoon season was adjusted using NOAA climate data. The start of was defined when the mean dew point temperatures of three consecutive days were greater than 55 degrees.
Scaling home range analyses by seasonal estimates reduces the number or locations for each lizard. 100% MCPs were used for seasonal home range analyses to avoid any further reduction of locations for each estimation.

Seasonal home ranges at Stone Canyon varied in size between seasons but did not seem shift (Fig.___), with seasonal home ranges overlapping each other, only expanding or collapsing between seasons. Home range patterns at Stone Canyon did not display the same seasonal variation in home range sizes that was observed at Owl Head Buttes. At Stone Canyon, Gila Monsters had relatively smaller home ranges throughout the year, where the highest inflation of range size was observed during the dry season from an increase in male home ranges, 18.2 ± 5.4 S.E. ha to that of female home range sizes at 10.1 ± 2.4 S.E. ha. Females at Stone Canyon displayed similar home ranges during the monsoon season, 10.6 ± 2.5 S.E. ha. Home range sizes at Owl Head Buttes had a much larger amount of variation across seasons than did those at Stone Canyon. There were still slightly larger ranges observed during the dry season, primarily due to increased home range sizes exhibited by males 29.4 ± 4.7 S.E. ha versus females at 15.6 ± 3.8 S.E. ha. During the monsoon season, there was still yet a large influx of home ranges sizes where female home ranges increased to 22.9 ± 4.0 S.E. ha. For both populations, home ranges during the emergence and post-monsoon seasons were small, marking the beginning and ending of overwintering periods, where minimal movement is observed in both groups.
Analysis indicated that there was an effect of season (df = 3, F = 15.41, P = <0.001) as well as an interaction of environment and season (df = 3, F = 6.84, P = <0.001), indicating that changes in seasonal home ranges sizes varied between each environment. Post-Hoc analyses on the Stone Canyon data set with home range means averaged across sex, suggested that there was no significant difference in home ranges between the emergence (4.32 ± 2.55 S.E. ha) and post-monsoon seasons (5.09 ± 2.07 S.E. ha) nor dry and monsoon (12.23 ± 1.74 S.E. ha and 9.04 ± 1.78 S.E. ha). There was also no significance between emergence and dry/monsoon seasons, but there was a difference between dry and post-monsoon (df = 80.2, P = 0.04). Post-Hoc analyses on the Owl Head Buttes population indicated that there was no significant difference between emergence (3.33 ± 2.24 S.E. ha) and post-monsoon (2.36 ± 2.36 S.E.) nor dry and monsoon (18.86 ± 2.25 S.E. ha and 21.85 ± 2.03 S.E. ha) reflecting the same pattern at Stone Canyon. However, there was a significant difference between emergence and dry/monsoon (df = 69.4, P = <0.0001, and df = 68, P = <0.0001 respectively), as well as post-monsoon and dry/monsoon (df = 78.9, P = <0.0001, and df = 74, P = <0.0001). This shows a rather different pattern than seen at Stone Canyon. Pairwise analyses between the two populations indicated no difference between emergence (df = 87.7, P = 0.76) or post-monsoon (df = 89.4, P = 0.35). Differences in home range sizes between the two populations were between the dry and monsoon seasons (Fig.___). Owl Head home ranges were 58% larger than those at Stone Canyon during the dry season, and 76% larger during the monsoon season.
Table 5 | Group means of seasonal home ranges between Stone Canyon (subsidized) and Owl Head Buttes (non-subsidized). These means are averaged across sex.
Table: Raw Group Means of Seasonal Home Ranges
Environment Season N Home_Range_100mcp sd se ci
-------------- ------------- --- ------------------ ---------- ---------- ---------
nonsubsidized Dry 12 23.7166667 12.841682 3.7070742 8.159215
nonsubsidized Emergence 10 2.8100000 3.121414 0.9870776 2.232925
nonsubsidized Monsoon 13 23.6538462 9.446482 2.6199828 5.708452
nonsubsidized Post_Monsoon 11 0.6909091 1.013365 0.3055411 0.680788
subsidized Dry 17 13.0364706 10.574940 2.5647997 5.437133
subsidized Emergence 9 2.0977778 1.649566 0.5498555 1.267969
subsidized Monsoon 18 10.5600000 7.518662 1.7721657 3.738943
subsidized Post_Monsoon 14 2.9885714 5.044404 1.3481737 2.912552
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_100mcp ~ Environment + Season + Sex + N + Environment *
Season + (1 | Gila)
Data: seasonal
REML criterion at convergence: 638.5
Scaled residuals:
Min 1Q Median 3Q Max
-2.0273 -0.5931 -0.0665 0.2579 3.2815
Random effects:
Groups Name Variance Std.Dev.
Gila (Intercept) 4.442 2.108
Residual 44.819 6.695
Number of obs: 100, groups: Gila, 30
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 14.61312 2.89899 78.80446 5.041 2.89e-06
Environmentsubsidized -6.62866 2.80355 88.30266 -2.364 0.02025
SeasonEmergence -15.53191 3.06290 69.30082 -5.071 3.16e-06
SeasonMonsoon 2.99228 2.88291 67.22814 1.038 0.30302
SeasonPost_Monsoon -16.49965 3.21222 78.88963 -5.137 1.97e-06
Sexmale 2.64121 1.69487 29.11504 1.558 0.12995
N 0.10913 0.03989 72.75357 2.735 0.00782
Environmentsubsidized:SeasonEmergence 7.62510 4.16148 75.14358 1.832 0.07087
Environmentsubsidized:SeasonMonsoon -6.17899 3.69021 67.26127 -1.674 0.09869
Environmentsubsidized:SeasonPost_Monsoon 9.36224 3.88337 68.51543 2.411 0.01860
(Intercept) ***
Environmentsubsidized *
SeasonEmergence ***
SeasonMonsoon
SeasonPost_Monsoon ***
Sexmale
N **
Environmentsubsidized:SeasonEmergence .
Environmentsubsidized:SeasonMonsoon .
Environmentsubsidized:SeasonPost_Monsoon *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) Envrnm SsnEmr SsnMns SsnP_M Sexmal N Env:SE Env:SM
Envrnmntsbs -0.629
SeasnEmrgnc -0.621 0.527
SeasonMonsn -0.581 0.562 0.524
SsnPst_Mnsn -0.677 0.504 0.525 0.514
Sexmale -0.447 0.079 0.060 0.021 0.071
N -0.581 0.003 0.193 0.065 0.341 0.313
Envrnmnt:SE 0.281 -0.614 -0.678 -0.366 -0.284 0.054 0.159
Envrnmnt:SM 0.499 -0.696 -0.423 -0.786 -0.425 -0.051 -0.121 0.448
Envrnm:SP_M 0.386 -0.654 -0.381 -0.407 -0.735 0.072 -0.005 0.443 0.501
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Environment 261.63 261.63 1 26.365 5.8375 0.0229042 *
Season 2072.56 690.85 3 78.967 15.4143 5.534e-08 ***
Sex 108.84 108.84 1 29.115 2.4285 0.1299532
N 335.38 335.38 1 72.754 7.4829 0.0078202 **
Environment:Season 920.94 306.98 3 71.524 6.8493 0.0004028 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Table 6 | Seasonal home range means between Stone Canyon (subsidized) and Owl Head Buttes (non-subsidized) popuations for males and females. These are raw means before being adjusted for environment, season, sex, and sample size.
Table: Seasonal Means by Sex Between Populations
Environment Season Sex N Home_Range_100mcp sd se ci
-------------- ------------- ------- --- ------------------ ----------- ---------- -----------
nonsubsidized Dry female 5 15.6600000 8.6291946 3.8590932 10.7145603
nonsubsidized Dry male 7 29.4714286 12.6476235 4.7803524 11.6971008
nonsubsidized Emergence female 5 4.4600000 3.4333657 1.5354478 4.2630866
nonsubsidized Emergence male 5 1.1600000 1.8242807 0.8158431 2.2651436
nonsubsidized Monsoon female 6 22.9833333 9.8151753 4.0070285 10.3003948
nonsubsidized Monsoon male 7 24.2285714 9.8668999 3.7293376 9.1253605
nonsubsidized Post_Monsoon female 4 1.4000000 1.4491377 0.7245688 2.3059014
nonsubsidized Post_Monsoon male 7 0.2857143 0.3670993 0.1387505 0.3395102
subsidized Dry female 11 10.1754545 8.0883118 2.4387178 5.4338018
subsidized Dry male 6 18.2816667 13.2661214 5.4158714 13.9219406
subsidized Emergence female 6 2.1133333 1.8474920 0.7542354 1.9388239
subsidized Emergence male 3 2.0666667 1.5326556 0.8848792 3.8073277
subsidized Monsoon female 11 10.6918182 8.4988679 2.5625051 5.7096172
subsidized Monsoon male 7 10.3528571 6.3010018 2.3815548 5.8274547
subsidized Post_Monsoon female 11 3.6309091 5.5527983 1.6742317 3.7304207
subsidized Post_Monsoon male 3 0.6333333 0.8007705 0.4623250 1.9892241

Adjusted Seasonal Means

Post-Hoc comparisons between populations for seasonal home range analysis:
$emmeans
Season = Dry:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 18.86 2.25 88.4 14.383 23.34
subsidized 12.23 1.75 87.4 8.745 15.72
Season = Emergence:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 3.33 2.24 88.7 -1.118 7.77
subsidized 4.32 2.55 84.7 -0.741 9.39
Season = Monsoon:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 21.85 2.03 87.5 17.811 25.89
subsidized 9.04 1.78 86.0 5.515 12.57
Season = Post_Monsoon:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 2.36 2.36 87.0 -2.322 7.04
subsidized 5.09 2.07 85.8 0.981 9.21
Results are averaged over the levels of: Sex
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Season = Dry:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 6.629 2.81 88.3 2.358 0.0206
Season = Emergence:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized -0.996 3.32 87.7 -0.300 0.7648
Season = Monsoon:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 12.808 2.66 87.2 4.814 <.0001
Season = Post_Monsoon:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized -2.734 2.96 89.4 -0.924 0.3581
Results are averaged over the levels of: Sex
Graphical Comparisons of seasons between the two populatins:

Figure 11 | Pairwise comparisons of each season between environments. Overlapping red bars indicate no statistical difference.
$emmeans
Environment = nonsubsidized:
Season emmean SE df lower.CL upper.CL
Dry 18.86 2.25 88.4 14.383 23.34
Emergence 3.33 2.24 88.7 -1.118 7.77
Monsoon 21.85 2.03 87.5 17.811 25.89
Post_Monsoon 2.36 2.36 87.0 -2.322 7.04
Environment = subsidized:
Season emmean SE df lower.CL upper.CL
Dry 12.23 1.75 87.4 8.745 15.72
Emergence 4.32 2.55 84.7 -0.741 9.39
Monsoon 9.04 1.78 86.0 5.515 12.57
Post_Monsoon 5.09 2.07 85.8 0.981 9.21
Results are averaged over the levels of: Sex
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Environment = nonsubsidized:
contrast estimate SE df t.ratio p.value
Dry - Emergence 15.532 3.07 69.4 5.054 <.0001
Dry - Monsoon -2.992 2.89 67.3 -1.036 0.7292
Dry - Post_Monsoon 16.500 3.24 78.9 5.098 <.0001
Emergence - Monsoon -18.524 2.91 68.0 -6.361 <.0001
Emergence - Post_Monsoon 0.968 3.08 73.0 0.314 0.9891
Monsoon - Post_Monsoon 19.492 3.03 74.0 6.426 <.0001
Environment = subsidized:
contrast estimate SE df t.ratio p.value
Dry - Emergence 7.907 3.11 88.6 2.543 0.0602
Dry - Monsoon 3.187 2.28 66.0 1.395 0.5070
Dry - Post_Monsoon 7.137 2.68 80.2 2.666 0.0450
Emergence - Monsoon -4.720 3.20 89.6 -1.475 0.4569
Emergence - Post_Monsoon -0.769 2.94 77.2 -0.262 0.9937
Monsoon - Post_Monsoon 3.951 2.78 84.9 1.421 0.4899
Results are averaged over the levels of: Sex
P value adjustment: tukey method for comparing a family of 4 estimates
Graphical Comparisons between seasons within the two populations:

Figure 12 | Pairwise comparisons between seasons within each environment against estimated marginal means. Overlapping red bars indicate no statistical difference.
$emmeans
Season = Dry:
Sex emmean SE df lower.CL upper.CL
female 6.92 2.19 47.2 2.523 11.3
male 20.36 2.77 48.3 14.798 25.9
Season = Emergence:
Sex emmean SE df lower.CL upper.CL
female 5.00 2.91 45.2 -0.853 10.9
male 5.63 4.00 49.0 -2.403 13.7
Season = Monsoon:
Sex emmean SE df lower.CL upper.CL
female 6.27 2.34 46.2 1.560 11.0
male 11.39 2.51 48.4 6.354 16.4
Season = Post_Monsoon:
Sex emmean SE df lower.CL upper.CL
female 5.94 2.09 47.9 1.738 10.1
male 3.09 3.99 48.5 -4.937 11.1
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Season = Dry:
contrast estimate SE df t.ratio p.value
female - male -13.441 3.68 47.2 -3.653 0.0006
Season = Emergence:
contrast estimate SE df t.ratio p.value
female - male -0.632 4.73 49.0 -0.134 0.8943
Season = Monsoon:
contrast estimate SE df t.ratio p.value
female - male -5.121 3.53 47.1 -1.449 0.1539
Season = Post_Monsoon:
contrast estimate SE df t.ratio p.value
female - male 2.847 4.36 48.9 0.652 0.5173
Graphical Comparisons between sex within the subsidized population:

Table 7 | Mean individual seasonal home ranges pooled from the entire study period. Missing values are depicted where no locations for that animal during that period were successfull.
Table: Seasonal Individual Home Ranges.
X Emergence X.1 X.2 Dry X.3 Monsoon X.4 Post.Monsoon X.5
------- ---------- ---------- ------ ------ ------ -------- ------- ------------- ------
Lizard Sex Area (ha) N Area N Area N Area N
M69 Male 0.33 4.00 36.73 24.00 14.84 22.00 0.07 8.00
M67 Male NA NA 5.71 9.00 7.72 7.00 NA NA
M255 Male 3.23 7.00 NA NA 1.07 9.00 NA NA
M215 Male 2.64 7.00 8.28 11.00 7.22 12.00 NA NA
M14 Male NA NA 6.20 15.00 7.50 10.00 NA NA
M119 Male NA NA 27.84 17.00 19.98 67.00 1.55 9.00
M112 Male NA NA 24.93 16.00 14.14 29.00 0.28 8.00
F66 Female 0.33 5.00 9.60 97.00 33.65 79.00 1.36 16.00
F36 Female 2.94 12.00 24.99 99.00 10.30 118.00 19.14 27.00
F252 Female 1.27 8.00 2.54 14.00 6.48 30.00 0.39 9.00
F214 Female NA NA 5.04 10.00 7.79 28.00 1.87 9.00
F200 Female NA NA 4.71 8.00 4.23 40.00 2.05 12.00
F147 Female 5.44 14.00 25.52 57.00 18.21 70.00 7.14 18.00
F146 Female NA NA 9.55 22.00 5.97 17.00 0.03 7.00
F137 Female 1.71 6.00 6.54 43.00 6.95 62.00 2.19 17.00
F135 Female NA N 3.71 25.00 5.72 48.00 0.68 5.00
F114 Female 0.99 12.00 13.66 99.00 10.72 84.00 4.56 24.00
F104 Female NA NA 6.07 70.00 7.59 49.00 0.53 13.00
Means Overall 1.89 13.04 10.56 2.99
Male 2.07 18.28 10.35 0.63
Female 2.11 10.18 10.69 3.63
$emmeans
Season = Dry:
Sex emmean SE df lower.CL upper.CL
female 14.05 3.70 32.3 6.50 21.59
male 21.97 3.95 32.7 13.93 30.02
Season = Emergence:
Sex emmean SE df lower.CL upper.CL
female 4.64 3.10 31.5 -1.68 10.97
male 1.34 3.24 32.1 -5.25 7.94
Season = Monsoon:
Sex emmean SE df lower.CL upper.CL
female 22.14 3.01 31.1 16.00 28.28
male 20.34 3.24 31.8 13.74 26.95
Season = Post_Monsoon:
Sex emmean SE df lower.CL upper.CL
female 2.96 4.76 32.0 -6.74 12.66
male 2.80 4.35 33.0 -6.05 11.66
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Season = Dry:
contrast estimate SE df t.ratio p.value
female - male -7.924 4.39 31.6 -1.803 0.0809
Season = Emergence:
contrast estimate SE df t.ratio p.value
female - male 3.302 4.44 31.6 0.744 0.4622
Season = Monsoon:
contrast estimate SE df t.ratio p.value
female - male 1.799 4.02 30.5 0.447 0.6581
Season = Post_Monsoon:
contrast estimate SE df t.ratio p.value
female - male 0.154 4.46 31.9 0.035 0.9726
Graphical Comparisons between sex within the non-subsidized population:

Seasonal Home Range (KDE)
Table | Raw KDE group means of seasonal home ranges between sexes at Stone Canyon (subsidized).
Error in summarySE(season.kde, measurevar = "Home_Range_95kde", groupvars = c("Season", :
could not find function "summarySE"
Error in summarySE(season.kde, measurevar = "Home_Range_95kde", groupvars = c("Season"), :
could not find function "summarySE"
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_95kde ~ Season + Sex + N + Season * Sex + (1 | Gila)
Data: season.kde
REML criterion at convergence: 385.8
Scaled residuals:
Min 1Q Median 3Q Max
-1.5521 -0.4814 -0.0391 0.3078 4.0086
Random effects:
Groups Name Variance Std.Dev.
Gila (Intercept) 28.37 5.327
Residual 195.80 13.993
Number of obs: 53, groups: Gila, 18
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 18.23503 6.63026 38.31066 2.750 0.00904 **
SeasonEmergence -2.97944 8.74706 43.60362 -0.341 0.73502
SeasonMonsoon -0.05632 6.01025 29.39051 -0.009 0.99259
SeasonPost_Monsoon -5.02474 7.19019 40.48869 -0.699 0.48865
Sexmale 23.42265 8.37161 41.14357 2.798 0.00779 **
N 0.05703 0.09819 33.91214 0.581 0.56521
SeasonEmergence:Sexmale -22.86106 17.87036 41.46355 -1.279 0.20791
SeasonMonsoon:Sexmale -11.51090 9.83940 29.98032 -1.170 0.25127
SeasonPost_Monsoon:Sexmale -35.74342 12.19911 34.68513 -2.930 0.00596 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) SsnEmr SsnMns SsnP_M Sexmal N SsnE:S SsnM:S
SeasnEmrgnc -0.656
SeasonMonsn -0.359 0.281
SsnPst_Mnsn -0.722 0.517 0.355
Sexmale -0.676 0.444 0.303 0.496
N -0.732 0.476 -0.120 0.476 0.421
SsnEmrgnc:S 0.300 -0.476 -0.141 -0.240 -0.423 -0.205
SsnMnsn:Sxm 0.283 -0.213 -0.600 -0.258 -0.625 -0.014 0.290
SsnPst_Mn:S 0.382 -0.276 -0.216 -0.561 -0.587 -0.221 0.262 0.423
ANOVA Table. Seasonal KDE
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Season 2654.14 884.71 3 39.026 4.5184 0.008181 **
Sex 179.65 179.65 1 25.426 0.9175 0.347144
N 66.05 66.05 1 33.912 0.3373 0.565207
Season:Sex 1743.14 581.05 3 36.391 2.9675 0.044584 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Raw Seasonal KDE Means

Adjusted Seasonal KDE Means

$emmeans
Season = Dry:
Sex emmean SE df lower.CL upper.CL
female 19.99 4.91 41.5 10.09 29.9
male 43.42 6.39 42.1 30.53 56.3
Season = Emergence:
Sex emmean SE df lower.CL upper.CL
female 17.01 7.24 42.4 2.41 31.6
male 17.58 15.47 43.6 -13.61 48.8
Season = Monsoon:
Sex emmean SE df lower.CL upper.CL
female 19.94 5.25 40.8 9.33 30.6
male 31.85 5.73 42.2 20.29 43.4
Season = Post_Monsoon:
Sex emmean SE df lower.CL upper.CL
female 14.97 5.29 41.3 4.29 25.7
male 2.65 9.13 43.3 -15.77 21.1
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Season = Dry:
contrast estimate SE df t.ratio p.value
female - male -23.423 8.47 41.2 -2.765 0.0085
Season = Emergence:
contrast estimate SE df t.ratio p.value
female - male -0.562 16.72 43.7 -0.034 0.9734
Season = Monsoon:
contrast estimate SE df t.ratio p.value
female - male -11.912 8.07 41.2 -1.475 0.1477
Season = Post_Monsoon:
contrast estimate SE df t.ratio p.value
female - male 12.321 10.14 43.9 1.215 0.2308

Home Range Overlap (MCP)
Gila Monster Home Range Overlap of 100% MCPs.
Figure 13 | Interactive map: Home Range overlap by sex of 100% MCPs at Stone Canyon. Red polygons represent female lizards, and blue represents male lizards.
The Stone Canyon population seems to exhibit greater female-female overlap as well as considerable overlap of male-female home ranges. There appears to be limited male-male overlap, with occurance happening in only two male-male home range polygons. This finding is in contrast to the Owl Head buttes study which revealed that there was a large degree of overlap among male-female and male-male overlaps (Table x). Gillardo concluded that, in their study, the high degree of overlap in males-males interactions may be due to having larger home ranges for mate searching activities. Males may have and increased home range size to maximize their access to multiple females. She concluded that the lack of female-female overlap may be due to smaller home range sizes.
At Stone Canyon, males have reduced home range sizes (Table 6; Fig. 4). However, males still retain home range overlap with multiple females while having reduced contact with other males. This may be in response to nutrient subsidies that reduce the need to have expanded home range sizes for foraging activities for both males and females. There may also be a higher density of females as a response to resource availability and reduced range requirements. Males are not forced to expand home ranges for mate searching to the extant that individuals at Owl Head Buttes may be subject to.
Table 8 | Home range overlap of Gila Monsters at the nutrient subsidized site. Male-male overlaps only occured between two pairs of males: M14-M69 and M119-M215 at 0.5 ha. and 19.5 ha. respectively and were therefore not included in the table.
Table: Home range overlap of Stone Canyon Gila Monsters using 100% MCPs.
ID F36 F66 F104 F135 F137 F146 F147 X M14 M67 M69 M112 M119 M215 M255
-------------- ----------- ----- ----- ----- ----- ----- ----- ------------ ------------ ----- ----- ------ ------ ------ -----
Female:Female Male:Female
F36 _ 5.13 _ _ _ 4.65 _ _ _ _ _ 19.44 18.51 _
F66 5.13 _ _ _ _ 5.05 _ _ _ 2.6 _ _ _ _
F104 _ _ _ 0.5 _ _ _ _ _ _ _ _ _
F114 _ _ _ _ _ _ _ _ _ _ 5.82 _ _ _
F135 _ _ 0.5 _ 2.89 _ 3.94 _ _ 2.04 _ _ _ _
F137 _ _ _ 2.89 _ _ 7.91 _ _ 0.55 _ _ _ _
F146 4.65 5.05 _ _ _ _ _ 0.14 _ 0.76 _ _ _ _
F147 _ _ _ 3.94 7.91 _ _ 3.73 0.21 4.6 _ _ _ _
F200 _ _ _ _ _ _ _ _ _ _ 6.49 _ _ _
F252 _ _ _ _ _ _ _ _ _ _ _ _ _ 3.45
Mean = 4.3 ± 0.86 Mean = 5.26 ± 1.78
ID F36 F66 F104 F135 F137 F146 F147 M14 M67 M69 M112 M119 M215 M255
Female:Female Male:Female
Net 6.84 7.25 0.5 4.44 7.91 6.77 8.96 3.87 0.21 8.57 12.31 21.24 20.32 3.45
Prportion 0.2 0.2 0.1 0.5 1 0.7 0.3 0.4 0.02 0.5 0.4 0.6 1 0.2
Error in summarySE(hr.overlap, measurevar = "OL", groupvars = c("Interaction"), :
could not find function "summarySE"
Home Range Overlap (KDE)
Figure 14 | Interactive map: Home Range overlap by sex of 95% KDEs at Stone Canyon. Red polygons represent female lizards, and blue represents male lizards.



LS0tCnRpdGxlOiAiU3BhdGlhbCBFY29sb2d5IG9mIEdpbGEgTW9uc3RlcnMgaW4gYSBTdWJzaWRpemVkIFJlc291cmNlIEVudmlyb25tZW50IgphdXRob3I6ICJQaWVyc29uLCBNLlQuLCBHaWVuZ2VyLCBDLk0uLCBEZU5hcmRvLCBELkYuLCBQYXJrZXIsIE0uLCBHYWxsYXJkbywgTC4sIEdvb2RlLCBNLiwgR2VudHJ5LCBDLk0uIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICBkZl9wcmludDogcGFnZWQKICByb3dzLnByaW50OiAxMAogIHRoZW1lOiBjb3NtbwogIGhpZ2hsaWdodDogYnJlZXplZGFyawogIG51bWJlcl9zZWN0aW9uczogeWVzCiAgdG9jOiB0cnVlCiAgdG9jX2Zsb2F0OgogICAgY29sbGFwc2VkOiBmYWxzZQogICAgc21vb3RoX3Njcm9sbDogdHJ1ZQpwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKZWRpdG9yX29wdGlvbnM6IApjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKaDEudGl0bGUgewogIGZvbnQtc2l6ZTogNDBweDsKICBmb250LWZhbWlseTogIkNhbGlicmkiLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IERhcmtCbHVlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogIGZvbnQtc2l6ZTogMjBweDsKICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICBjb2xvcjogRGFya0JsdWU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cjwvc3R5bGU+CgojIEFCU1RSQUNUOiAKQW5pbWFsIG1vdmVtZW50cyBhcmUgb2Z0ZW4gZGVmaW5lZCB1c2luZyB0aGUgaG9tZSByYW5nZSBjb25jZXB0LiBDb25zZXF1ZW50bHksIGhvbWUgcmFuZ2VzIGFyZSBkZXRlcm1pbmVkIGJ5IHRlbXBvcmFsLCBzcGF0aWFsLCBhbmQgaW5kaXZpZHVhbC1sZXZlbCBwcm9jZXNzZXMuIFdpdGhpbiB0aGUgZW52aXJvbm1lbnQsIG9uZSBvZiB0aGUga2V5IGZhY3RvcnMgaW5mbHVlbmNpbmcgYW4gYW5pbWFs4oCZcyByYW5nZSBhbmQgaG93IGl0IHVzZXMgdGhlIGVudmlyb25tZW50IGlzIHRoYXQgb2YgcmVzb3VyY2VzLiBBbHRlcmF0aW9ucyB0byB0aGUgZW52aXJvbm1lbnQgdGhhdCBhZmZlY3QgcmVzb3VyY2UgZGlzdHJpYnV0aW9uIGFuZCBhdmFpbGFiaWxpdHkgY2FuIGhhdmUgcHJvZm91bmQgY29uc2VxdWVuY2VzIG9uIGFuIGFuaW1hbOKAmXMgc3BhdGlhbCBwYXR0ZXJucy4gT25lIG9mIHRoZSBiZXN0IGV4YW1wbGVzIG9mIHRoaXMgaXMgdGhhdCBvZiBnb2xmIGNvdXJzZXMuIENlcnRhaW4gZW52aXJvbm1lbnRhbCBtb2RpZmljYXRpb25zIGV4aGliaXRlZCBieSBzb21lIGh1bWFuIGFsdGVyZWQgZW52aXJvbm1lbnRzIGNhbiBoYXZlIHBvc2l0aXZlIGVmZmVjdHMgb24gY2VydGFpbiB3aWxkbGlmZSBzcGVjaWVzIGJ5IGFsdGVyaW5nIHRoZWlyIG1vdmVtZW50IHBhdHRlcm5zIGFuZCBmb3JhZ2luZyBlZmZvcnRzLiBXZSBhbmFseXplZCBkYXRhIGNvbGxlY3RlZCBmcm9tIDIyIEdpbGEgTW9uc3RlcnMgKkhlbG9kZXJtYSBzdXNwZWN0dW0qIGF0IGEgc3Vic2lkaXplZCBlbnZpcm9ubWVudCBpbiBBcml6b25hIGZyb20gMjAwNyB0byAyMDEzIGFuZCAxNSBHaWxhIE1vbnN0ZXJzIGZyb20gYSBub24tc3Vic2lkaXplZCBlbnZpcm9ubWVudCBmcm9tIDIwMDAgdG8gMjAwMi4gV2UgcGVyZm9ybWVkIGJvdGgga2VybmVsIGRlbnNpdHkgZXN0aW1hdGlvbiBhbmQgbWluaW11bSBjb252ZXggcG9seWdvbnMgZm9yIGNvbXBhcmFiaWxpdHkgcHVycG9zZXMuIEFmdGVyIGFkanVzdGluZyBhcmVhIGVzdGltYXRlcyBmb3Igc2V4LCBudW1iZXIgb2YgZml4ZXMsIGFuZCB5ZWFyLCBtYWxlcyBpbiB0aGUgc3Vic2lkaXplZCBlbnZpcm9ubWVudCBoYWQgYW4gYXZlcmFnZSBvdmVyYWxsIGFyZWEgb2YgMTMuNiBoYSB3aGlsZSB0aGUgZmVtYWxlcyBoYWQgYW4gYXJlYSBvZiA4LjMgaGEuIEluIHRoZSB1bnN1YnNpZGl6ZWQgZW52aXJvbm1lbnQsIG1hbGVzIGhhZCBhbiBhdmVyYWdlIG92ZXJhbGwgYXJlYSBvZiA0My4yIGhhIHdoaWxlIGZlbWFsZXMgaGFkIGFuIGFyZWEgb2YgMjMuNiBoYS4gR2lsYSBNb25zdGVycyBiZXR3ZWVuIHRoZSB0d28gZW52aXJvbm1lbnRzIGFsc28gZXhoaWJpdGVkIHNlYXNvbmFsIGRpZmZlcmVuY2VzLCBwcmltYXJpbHkgaW4gdGhlIGRyeSBhbmQgbW9uc29vbiBzZWFzb25zLiBUaGVyZSB3ZXJlIGFsc28gZGlmZmVyZW5jZXMgaW4gaG9tZSByYW5nZSBvdmVybGFwIHdpdGhpbiBhbmQgYmV0d2VlbiBzZXhlcy4gSW4gdGhlIHN1YnNpZGl6ZWQgcG9wdWxhdGlvbiwgdGhlcmUgd2FzIHZlcnkgbGl0dGxlIG1hbGUtbWFsZSBvdmVybGFwIHdpdGggb25seSB0d28gb2NjdXJhbmNlcywgbW9yZSBmZW1hbGUtZmVtYWxlIG92ZXJsYXAgYW5kIG1hbGUtZmVtYWxlIG92ZXJsYXAgd2FzIGluY3JlYXNlZC4gTWFsZSBob21lIHJhbmdlcyBvZnRlbiBvdmVybGFwcGVkIHNldmVyYWwgZmVtYWxlIGhvbWUgcmFuZ2VzLiBUaGlzIHN1Z2dlc3RzIHRoYXQgR2lsYSBtb25zdGVyIGhvbWUgcmFuZ2VzIG1heSBiZSBzbWFsbGVyIGluIHN1YnNpZGl6ZWQgcmVzb3VyY2UgZW52aXJvbm1lbnRzIHRoYW4gdGhvc2Ugb2YgdW4tc3Vic2lkaXplZCBlbnZpcm9ubWVudHMgZHVlIHRvIGluY3JlYXNlcyBpbiBhdmFpbGFibGUgcmVzb3VyY2VzLgoKCgoKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQojIExPQUQgUEFDS0FHRVMgCgpsaWJyYXJ5KHRpZHl2ZXJzZSkgCmxpYnJhcnkoa25pdHIpICMgIG1ha2UgdGFibGVzCmxpYnJhcnkobGVhZmxldCkKbGlicmFyeShsbWU0KQpsaWJyYXJ5KGxtZXJUZXN0KQpsaWJyYXJ5KHJlYWRyKQpsaWJyYXJ5KGdncGxvdDIpCiMgbGlicmFyeShkcGx5cikKbGlicmFyeShnZ2ZvcnRpZnkpCmxpYnJhcnkob3JkaW5hbCkKbGlicmFyeShsc21lYW5zKQpsaWJyYXJ5KGVtbWVhbnMpCmxpYnJhcnkobWFwdmlldykKbGlicmFyeShhZGVoYWJpdGF0SFIpCiMgbGlicmFyeShPcGVuU3RyZWV0TWFwKQpsaWJyYXJ5KGdnbWFwKQoja25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxLzMpICNmb3JjZSBmaWd1cmVzIHRvIGJlIGNlcnRhaW4gc2l6ZSBhbmQgYXNwZWN0IHJhdGlvCmBgYAoKCgojIEdpbGEgTW9uc3RlcnMgKkhlbG9kZXJtYSBzdXNwZWN0dW0qCgoKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmxpYnJhcnkoZGlzbW8pCmxpYnJhcnkocmdiaWYpCmxpYnJhcnkodXRpbHMpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KHNwb3RpZnlyKQpsaWJyYXJ5KGdncmlkZ2VzKQpsaWJyYXJ5KHZpcmlkaXMpCmxpYnJhcnkocmFzdGVyVmlzKQoKIyMgVVNJTkcgRElTTU86CiMgZXh0ZW50IDwtIGV4dGVudCgtMTMwLC03MCwyMCw2MCkKCkguc3VzcCA8LSBnYmlmKCJoZWxvZGVybWEiLCBzcGVjaWVzID0gInN1c3BlY3R1bSIsIGV4dCA9IGV4dGVudCwKICAgICAgICAgICAgIGdlbyA9IFRSVUUsIHNwID0gVFJVRSwgZG93bmxvYWQgPSBUUlVFLAogICAgICAgICAgICAgcmVtb3ZlWmVyb3MgPSBUUlVFKQoKSC5zdXNwX3h5IDwtIGFzLmRhdGEuZnJhbWUoY2JpbmQoSC5zdXNwQGNvb3Jkc1ssMV0sSC5zdXNwQGNvb3Jkc1ssMl0pKQpjb2xuYW1lcyhILnN1c3BfeHkpIDwtIGMoImxvbmdpdHVkZSIsImxhdGl0dWRlIikKCiMgdXMgPC0gbWFwX2RhdGEoInN0YXRlIikKCiMgZ2dwbG90KGRhdGEgPSBILnN1c3BfeHksIGFlcyh4PWxvbmdpdHVkZSwgeT1sYXRpdHVkZSkpICsKIyAgIGdlb21fcG9seWdvbihkYXRhID0gdXMsIGFlcyh4PWxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXApLAojICAgICAgICAgICAgICAgIGZpbGwgPSAid2hpdGUiLCBjb2xvcj0iYmxhY2siKSArCiMgICBnZW9tX3BvaW50KCkgKyB4bGFiKCJMb25naXR1ZGUiKSArIHlsYWIoIkxhdGl0dWRlIikgKwojICAgY29vcmRfZml4ZWQoeGxpbSA9IGMoLTEyMCwtMTA2KSwgeWxpbSA9IGMoMzAsNDEpKQoKIyMgIFVTSU5HIFJHQklGOgpILnN1c3BfbHUgPC0gbmFtZV9sb29rdXAocXVlcnkgPSAnaGVsb2Rlcm1hIHN1c3BlY3R1bScsIHJldHVybiA9ICdkYXRhJykKCkguc3VzcF9jb2RlIDwtIHByaW50KGFzLmludGVnZXIobmFtZXMod2hpY2gubWF4KHRhYmxlKEguc3VzcF9sdSRudWJLZXkpKSkpKQoKb2NjX2NvdW50KHRheG9uS2V5ID0gSC5zdXNwX2NvZGUsIGdlb3JlZmVyZW5jZWQgPSBUUlVFKQoKdXNhIDwtIGlzb2NvZGVzW2dyZXAoIlVuaXRlZCBTdGF0ZXMiLCBpc29jb2RlcyRuYW1lKSwgImNvZGUiXQptZXggPC0gaXNvY29kZXNbZ3JlcCgiTWV4aWNvIiwgaXNvY29kZXMkbmFtZSksICJjb2RlIl0KCkguc3VzcF9kYXRhIDwtIG9jY19zZWFyY2godGF4b25LZXkgPSBILnN1c3BfY29kZSwgCiAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAnZGF0YScsIAogICAgICAgICAgICAgICAgICAgY291bnRyeSA9IHVzYSwKICAgICAgICAgICAgICAgICAgIGhhc0Nvb3JkaW5hdGUgPSBUUlVFKQoKSC5zdXNwX2RhdGEubWV4IDwtIG9jY19zZWFyY2godGF4b25LZXkgPSBILnN1c3BfY29kZSwgCiAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAnZGF0YScsIAogICAgICAgICAgICAgICAgICAgY291bnRyeSA9IG1leCwKICAgICAgICAgICAgICAgICAgIGhhc0Nvb3JkaW5hdGUgPSBUUlVFKQoKSC5zdXNwX2RmIDwtIGFzLmRhdGEuZnJhbWUoY2JpbmQoSC5zdXNwX2RhdGEkVVMkc2NpZW50aWZpY05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnN1c3BfZGF0YSRVUyRpbnN0aXR1dGlvbkNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnN1c3BfZGF0YSRVUyRzdGF0ZVByb3ZpbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC5zdXNwX2RhdGEkVVMkdmVyYmF0aW1Mb2NhbGl0eSkpCgpILnN1c3BfZGYubWV4IDwtIGFzLmRhdGEuZnJhbWUoY2JpbmQoSC5zdXNwX2RhdGEubWV4JHNjaWVudGlmaWNOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC5zdXNwX2RhdGEubWV4JGluc3RpdHV0aW9uQ29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEguc3VzcF9kYXRhLm1leCRzdGF0ZVByb3ZpbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC5zdXNwX2RhdGEubWV4JHZlcmJhdGltTG9jYWxpdHkpKQoKSC5zdXNwX2RmLnVzbWV4IDwtIGFzLmRhdGEuZnJhbWUocmJpbmQoSC5zdXNwX2RmLEguc3VzcF9kZi5tZXgpKQpWaWV3KEguc3VzcF9kZi51c21leCkKCmNvb3JkcyA8LSBjYmluZCh0eXBlLmNvbnZlcnQoSC5zdXNwX2RhdGFbWyJVUyJdXVtbImRlY2ltYWxMb25naXR1ZGUiXV0sIGFzLmlzID0gVFJVRSksCiAgICAgICAgICAgICAgICB0eXBlLmNvbnZlcnQoSC5zdXNwX2RhdGFbWyJVUyJdXVtbImRlY2ltYWxMYXRpdHVkZSJdXSwgYXMuaXMgPSBUUlVFKSkKCmNvb3Jkcy5tZXggPC0gY2JpbmQodHlwZS5jb252ZXJ0KEguc3VzcF9kYXRhLm1leFtbImRlY2ltYWxMb25naXR1ZGUiXV0sIGFzLmlzID0gVFJVRSksCiAgICAgICAgICAgICAgICB0eXBlLmNvbnZlcnQoSC5zdXNwX2RhdGEubWV4W1siZGVjaW1hbExhdGl0dWRlIl1dLCBhcy5pcyA9IFRSVUUpKQoKY29vcmRzIDwtICByYmluZChjb29yZHMsY29vcmRzLm1leCkKVmlldyhjb29yZHMpCgpILnN1c3BfaW5mbyA8LSBjYmluZChILnN1c3BfZGYudXNtZXgsY29vcmRzKQpWaWV3KEguc3VzcF9pbmZvKQpjb2xuYW1lcyhILnN1c3BfaW5mbykgPC0gYygic3BlY2llcyIsImRhdGFzZXQiLCJzdGF0ZSIsImxvY2F0aW9uIiwibG9uZ2l0dWRlIiwibGF0aXR1ZGUiKQoKd29ybGQgPC0gbWFwX2RhdGEoIndvcmxkIikKc3RhdGVzIDwtIG1hcF9kYXRhKCJzdGF0ZSIpCmNvdW50aWVzIDwtIG1hcF9kYXRhKCJjb3VudHkiKQoKY291bnRpZXMkcG9seW5hbWUgPC0gcGFzdGUoY291bnRpZXMkcmVnaW9uLCBjb3VudGllcyRzdWJyZWdpb24sIHNlcCA9ICIsIikKY291bnRpZXMgPC0gY291bnRpZXMgJT4lIGxlZnRfam9pbihmaXBzLCBieSA9IGMoInBvbHluYW1lIiA9ICJwb2x5bmFtZSIpKQpjb3VudGllcyRmaXBzIDwtIGFzLmNoYXJhY3Rlcihjb3VudGllcyRmaXBzKQoKc291dGh3ZXN0ZXJuX3N0YXRlcyA8LSBzdWJzZXQoc3RhdGVzLCByZWdpb24gJWluJSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoImFyaXpvbmEiLCAiY2FsaWZvcm5pYSIsICJ1dGFoIiwgIm5ldmFkYSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV3IG1leGljbyIsICJjb2xvcmFkbyIsInRleGFzIiwib2tsYWhvbWEiLCJrYW5zYXMiKSkKCnNvdXRod2VzdGVybl9jb3VudGllcyA8LSBzdWJzZXQoY291bnRpZXMsIHJlZ2lvbiAlaW4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJhcml6b25hIiwgImNhbGlmb3JuaWEiLCAidXRhaCIsICJuZXZhZGEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV3IG1leGljbyIsICJjb2xvcmFkbyIsInRleGFzIiwib2tsYWhvbWEiLCJrYW5zYXMiKSkKCmxpYnJhcnkocmFzdGVyKQpwcm92aW5jZXMgPC0gYygiU29ub3JhIiwiU2luYWxvYSIpCgptZXhpY28gPC0gZ2V0RGF0YSgiR0FETSIsY291bnRyeT0iTUVYIixsZXZlbD0xKQoKbWV4LnByb3ZpbmNlcyA8LSBtZXhpY29bbWV4aWNvJE5BTUVfMSAlaW4lIHByb3ZpbmNlcyxdCgpnZ3Bsb3QoZGF0YSA9IEguc3VzcF9pbmZvLCBhZXMoeD1sb25naXR1ZGUsIHk9bGF0aXR1ZGUpKSArIAogIGdlb21fcG9seWdvbihkYXRhID0gd29ybGQsIGFlcyh4PWxvbmcseT1sYXQsIGdyb3VwPWdyb3VwKSwgZmlsbCA9ICJncmF5IiwgY29sb3IgPSJ3aGl0ZSIpKwogIGdlb21fcG9seWdvbihkYXRhID0gc3RhdGVzLCBhZXMoeD1sb25nLHk9bGF0LCBncm91cD1ncm91cCksIGZpbGwgPSAiZ3JheSIsIGNvbG9yID0gIndoaXRlIikrCiAgIyBnZW9tX3BvbHlnb24oZGF0YSA9IGZsX3BvbHksIGFlcyh4PWxvbmcsIHk9bGF0LCBncm91cD1ncm91cCwgZmlsbCA9IGZpbGwpKSAgCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSBzb3V0aHdlc3Rlcm5fc3RhdGVzLCBhZXMoeD1sb25nLHk9bGF0LCBncm91cD1ncm91cCksIGZpbGwgPSBOQSwKICAgICAgICAgICAgICAgY29sb3I9IndoaXRlIikgKwogIGdlb21fcG9seWdvbihkYXRhID0gc291dGh3ZXN0ZXJuX2NvdW50aWVzLCBhZXMoeD1sb25nLHk9bGF0LCBncm91cD1ncm91cCksIGZpbGwgPSBOQSwgCiAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMDUpICsKICBnZW9tX3BvbHlnb24oZGF0YT1tZXgucHJvdmluY2VzLCBhZXMoeD1sb25nLHk9bGF0LCBncm91cD1ncm91cCksIGZpbGwgPSAiZ3JheSIsIAogICAgICAgICAgICAgICBjb2xvciA9IndoaXRlIikgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gc3RhdGUpLCBzaXplPTEpICsKICBjb29yZF9tYXAoImNvbmljIiwgbGF0MCA9IDMwLCB4bGltPWMoLTExOSwtOTgpLCB5bGltPWMoMjMsMzgpKSArCiAgc2NhbGVfZmlsbF9pZGVudGl0eSgpICsKICB0aGVtZV9ncmV5KCkgKyB0aGVtZShsZWdlbmQucG9zaXRpb249InJpZ2h0IikgKyB0aGVtZShsZWdlbmQudGl0bGUuYWxpZ249MC41KSArCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gJ2RlZXBza3libHVlJyksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSBOQSkpICsKICBsYWJzKHggPSAiTG9uZ2l0dWRlIiwgeSA9ICJMYXRpdHVkZSIsIAogICAgICAgdGl0bGUgPSAiR2lsYSBNb25zdGVyIERpc3RyaWJ1dGlvbiIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSkKYGBgCgoKCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFLCBjYWNoZT1UUlVFfQojIGdnbWFwOjpyZWdpc3Rlcl9nb29nbGUoa2V5ID0gIkFJemFTeUJqaGhFOXBlUkJtUzFoOVdZUXgxazVNRl9YQVhxVWZTcyIpCiMgCiMgcDM8LSBnZ21hcChnZXRfZ29vZ2xlbWFwKGNlbnRlciA9IGMobG9uID0gLTExMC45OTA4OCwgbGF0ID0gMzIuNDY4NzgpLAojICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tID0gMTUsIHNjYWxlID0gMixtYXB0eXBlID0nc2F0ZWxsaXRlJyxhcmNoaXZpbmcgPSBUUlVFLAojICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICdjb2xvcicpKQojIAojIHAzCgpMb25naXR1ZGU8LWMoLTExMC45NzgsLTExMC45NzgsLTExMC45ODAsLTExMC45ODMsLTExMC45ODUsLTExMC45ODgsLTExMC45OTAsLTExMC45OTQsLTExMC45OTUsCiAgICAgICAgICAgICAtMTEwLjk5NywtMTExLjAwMywtMTExLjAwNCwtMTExLjAwNDIsLTExMS4wMDAsLTExMC45OTUsLTExMC45ODUsLTExMC45NzgsLTExMC45OCkKCkxhdGl0dWRlPC1jKDMyLjQ2MywzMi40NjIsMzIuNDYyLDMyLjQ2MSwzMi40NjEsMzIuNDYwLDMyLjQ2MiwzMi40NjQsMzIuNDY2LDMyLjQ2OCwzMi40NjgsCiAgICAgICAgICAgIDMyLjQ2OSwzMi40NzMsMzIuNDczMywzMi40NzIsMzIuNDc0LDMyLjQ3MSwzMi40NjcpCgpteWNvb3JkZGF0YSA8LSBhcy5kYXRhLmZyYW1lKGNiaW5kKExvbmdpdHVkZSxMYXRpdHVkZSkpCgpwMytnZW9tX3BvbHlnb24oZGF0YT1teWNvb3JkZGF0YSxhZXMoeD1Mb25naXR1ZGUseT1MYXRpdHVkZSksYWxwaGE9MC4yLGNvbG91cj0icmVkIiwKICAgICAgICAgICAgICAgIGZpbGw9InJlZCIpKwogICMgZ2VvbV9wYXRoKGRhdGE9bXljb29yZGRhdGEsYWVzKHg9TG9uZ2l0dWRlLHk9TGF0aXR1ZGUpLAogICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyPSJ3aGl0ZSIsYWxwaGE9MC40LHNpemU9MikrCiAgYW5ub3RhdGUoInRleHQiLCB4PS0xMTAuOTg5LHk9MzIuNDY4LGxhYmVsPSJTdG9uZSBDYW55b24gQ2x1YiIsY29sb3VyPSJ3aGl0ZSIsc2l6ZT0zKSsKICAjIHNjYWxlYmFyKHgubWluID0gLTExMS4wMDUsIHgubWF4ID0gLTExMC45NzUsCiAgIyAgICAgICAgIHkubWluID0gMzIuNDU1LCB5Lm1heCA9IDMyLjQ4MCwgYW5jaG9yID0gTlVMTCwKICAjICAgICAgICAgIGRpc3QgPSA1MCwgdHJhbnNmb3JtPVRSVUUsZGlzdF91bml0PSJtIiwgbW9kZWwgPSAnV0dTODQnKSsKICBsYWJzKHRpdGxlID0gIlNDR0MgU3R1ZHkgU2l0ZSBPcm8gVmFsbGV5IEFyaXpvbmEiKQpgYGAKRmlndXJlIDEgfCBTdG9uZSBDYW55b24gR29sZiBDbHViLCBsb2NhdGVkIGluIE9ybyBWYWxsZXksIEFyaXpvbmEgb24gdGhlIG5vcnRoZXJuIGVkZ2Ugb2YgVHVjc29uLgoKCgoKYGBge3J9CkFsbC5HaWxhcyA8LSByZWFkX2NzdigiLi9HTV9GaW5hbF9EYXRhLmNzdiIpCgp1dG1fcG9pbnRzIDwtIGNiaW5kKEFsbC5HaWxhcyRFQVNUSU5HLCBBbGwuR2lsYXMkTk9SVEhJTkcpCgp1dG1fbG9jYXRpb25zIDwtIFNwYXRpYWxQb2ludHModXRtX3BvaW50cywgcHJvajRzdHJpbmc9Q1JTLlNDKQoKcHJval9sYXQubG9uIDwtIGFzLmRhdGEuZnJhbWUoc3BUcmFuc2Zvcm0odXRtX2xvY2F0aW9ucywgQ1JTKCIrcHJvaj1sb25nbGF0ICtkYXR1bT1XR1M4NCIpKSkKY29sbmFtZXMocHJval9sYXQubG9uKSA8LSBjKCJ4IiwieSIpCgojIyBGT1JUSUdZIFNQQVRJQUwgU1BBVElBTCBQT0lOVFMgRk9SIFBMT1RUSU5HOgpwcm9qX2xhdC5sb24gPC0gZm9ydGlmeShwcm9qX2xhdC5sb24sIHJlZ2lvbiA9ICJUeXBlIikKCm15TWFwIDwtIGdldF9zdGFtZW5tYXAoYmJveCA9IGMobGVmdCA9IC0xMTEuMDA5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbSA9IDMyLjQ1OSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IC0xMTAuOTY5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCA9IDMyLjQ3NCksCiAgICAgICAgICAgICAgICAgICAgICAgbWFwdHlwZSA9ICJ0ZXJyYWluIiwgCiAgICAgICAgICAgICAgICAgICAgICAgY3JvcCA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgIHpvb20gPSAxNSkKCmdnbWFwKG15TWFwKStnZW9tX3BvaW50KGRhdGE9cHJval9sYXQubG9uLCBhZXMoeD14LCB5PXkpLCBzaXplPTAuMykKYGBgCgoKCgoKYGBge3IgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmJpb2NsaW0gPC0gZ2V0RGF0YShuYW1lID0gIndvcmxkY2xpbSIsIHJlcyA9IDIuNSwgdmFyID0gImJpbyIsIHBhdGggPSAiLi9EYXRhLyIpCgpuYW1lcyhiaW9jbGltKSA8LSBjKCJBbm4gTWVhbiBUZW1wIiwiTWVhbiBEaXVybmFsIFJhbmdlIiwiSXNvdGhlcm1hbGl0eSIsCiAgICAgICAgICAgICAgICAgICAgIlRlbXBlcmF0dXJlIFNlYXNvbmFsaXR5IiwiTWF4IFRlbXAgV2FybWVzdCBNbyIsIk1pbiBUZW1wIENvbGRlc3QgTW8iLAogICAgICAgICAgICAgICAgICAgICJBbm4gVGVtcCBSYW5nZSIsIk1lYW4gVGVtcCBXZXR0ZXN0IFF0ciIsIk1lYW4gVGVtcCBEcmllc3QgUXRyIiwKICAgICAgICAgICAgICAgICAgICAiTWVhbiBUZW1wIFdhcm1lc3QgUXRyIiwiTWVhbiBUZW1wIENvbGRlc3QgUXRyIiwiQW5udWFsIFByZWNpcCIsCiAgICAgICAgICAgICAgICAgICAgIlByZWNpcCBXZXR0ZXN0IE1vIiwiUHJlY2lwIERyaWVzdCBNbyIsIlByZWNpcCBTZWFzb25hbGl0eSIsCiAgICAgICAgICAgICAgICAgICAgIlByZWNpcCBXZXR0ZXN0IFF0ciIsIlByZWNpcCBEcmllc3QgUXRyIiwiUHJlY2lwIFdhcm1lc3QgUXRyIiwKICAgICAgICAgICAgICAgICAgICAiUHJlY2lwIENvbGRlc3QgUXRyIikKCiMgYmlvX2V4dGVudCA8LSBleHRlbnQoeCA9IGMoCiMgICBtaW4oSC5zdXNwX3h5JGxvbmdpdHVkZSksCiMgICBtYXgoSC5zdXNwX3h5JGxvbmdpdHVkZSksCiMgICBtaW4oSC5zdXNwX3h5JGxhdGl0dWRlKSwKIyAgIG1heChILnN1c3BfeHkkbGF0aXR1ZGUpKSkKCmJpb19leHRlbnQgPC0gZXh0ZW50KHggPSBjKAogIG1pbigtMTE4KSwKICBtYXgoLTEwNSksCiAgbWluKDMwKSwKICBtYXgoNDApKSkKCgpiaW9jbGltX2V4dGVudCA8LSBjcm9wKHggPSBiaW9jbGltLCB5ID0gYmlvX2V4dGVudCkKYmlvY2xpbV9tb2RlbCA8LSBiaW9jbGltKHggPSBiaW9jbGltX2V4dGVudCwgcCA9IEguc3VzcF94eSkKcHJlc2VuY2VfbW9kZWwgPC0gZGlzbW86OnByZWRpY3Qob2JqZWN0ID0gYmlvY2xpbV9tb2RlbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBiaW9jbGltX2V4dGVudCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dCA9IGJpb19leHRlbnQpCgojIEguc3VzcF9pbmZvCmdwbG90KHByZXNlbmNlX21vZGVsKSArIAogIGdlb21fcmFzdGVyKGFlcyhmaWxsPXZhbHVlKSkgKwogIGdlb21fcG9seWdvbihkYXRhID0gdXMsIGFlcyh4PSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgICAgICAgICAgICAgZmlsbCA9IE5BLCBjb2xvcj0iYmxhY2siKSArCiAgZ2VvbV9wb2ludChkYXRhID0gSC5zdXNwX2luZm8sIGFlcyh4ID0gbG9uZ2l0dWRlLCB5ID0gbGF0aXR1ZGUpLCBjb2xvciA9ICJibGFjayIsIAogICAgICAgICAgICAgYWxwaGEgPSAwLjUpICsKICBzY2FsZV9maWxsX2dyYWRpZW50bihjb2xvdXJzPWMoImJyb3duIiwieWVsbG93IiwiZGFya2dyZWVuIiksICJQcm9iYWJpbGl0eSIpICsKICBjb29yZF9maXhlZCh4bGltID0gYygtMTE3LC0xMDYpLCB5bGltID0gYygzMSwzOSkpICsKICB4bGFiKCJMb25naXR1ZGUiKSArIHlsYWIoIkxhdGl0dWRlIikgKyBnZ3RpdGxlKCJQcm9iYWJpbGl0eSBvZiBHaWxhIE1vbnN0ZXIgT2NjdXJyZW5jZSIpICsgCiAgdGhlbWVfYncoKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCkpCmBgYAoKCgoKCgojIE92ZXJhbGwgWWVhcmx5IEhvbWUgUmFuZ2VzIChNQ1ApCgo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+U3VtbWFyeSBvZiBob21lIHJhbmdlIHNpemUuPC9zcGFuPgoKVGFibGUgMSB8IFBvb2xlZCBvdmVyYWxsIGhvbWUgcmFuZ2VzIG9mIEdpbGEgTW9uc3RlcnMgYXQgT3dsIEhlYWQgQnV0dGVzIGFuZCBTdG9uZSBDYW55b24gR29sZiBDbHViLiBCb3RoIDEwMCUgYW5kIDk1JSBNQ1BzIHdlcmUgY2FsY3VsYXRlZCBiZXR3ZWVuIGJvdGggcG9wdWxhdGlvbnMuIApgYGB7ciBIb21lIHJhbmdlIHNpemVzIG9mIFN0b25lIENhbnlvbiBhbmQgT3dsIEhlYWQgQnV0dGVzIGJ5IHllYXIuLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KR01fdGFibGUgPC0gcmVhZF9jc3YoIkdNX3RhYmxlLmNzdiIpCmthYmxlKEdNX3RhYmxlLGZvcm1hdD0icGFuZG9jIiwgY2FwdGlvbj0nSG9tZSByYW5nZSBzaXplcyBvZiBTdG9uZSBDYW55b24gYW5kIE93bCBoZWFkIEJ1dHRlcyB1c2luZyBib3RoIDk1IHBlcmNlbnQgYW5kIDEwMCBwZXJjZW50IE1DUHMuJykKYGBgCgpPdmVyYWxsIGNvbWJpbmVkIG1lYW46CmBgYHtyfQpNZWFucyA8LSBzdW1tYXJ5U0UoeWVhciwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV8xMDBtY3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIpLG5hLnJtID0gVFJVRSkKCk1lYW5zCmBgYAoKCgoKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5HaWxhIE1vbnN0ZXIgSG9tZSBSYW5nZSBTaXplcyBhdCBTdG9uZSBDYW55b24gdnMuIE93bCBIZWFkIEJ1dHRlcy48L3NwYW4+CgoKYGBge3IgU3RvbmUgQ2FueW9uIFZzLiBPd2wgSGVhZCBCdXR0ZXMsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnllYXIgPC0gcmVhZF9jc3YoIkdNX0NvbnNvbGlkYXRlZF9CeVllYXIuY3N2IikKCiMgcXVpY2sgcGxvdApHcmFwaDE8LWdncGxvdCh5ZWFyLGFlcyh4PU4xMDAseT1Ib21lX1JhbmdlXzEwMG1jcCxncm91cD1FbnZpcm9ubWVudCkpKwogIGdlb21fcG9pbnQoYWVzKHNoYXBlID0gZmFjdG9yKEVudmlyb25tZW50KSksIHNpemUgPSAyKSsKICBnZW9tX3Ntb290aChtZXRob2Q9bG0pKwogICMgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9YyhzdWJzaWRpemVkPSJjeWFuMyIsbm9uc3Vic2lkaXplZD0iaW5kaWFuIHJlZDEiKSkrCiAgIyBsYWJzKHRpdGxlID0gIjEwMCUgTUNQIEhvbWUgUmFuZ2VzIikrCiAgeGxhYigiTnVtYmVyIG9mIFJlbG9jYXRpb25zIikrCiAgeWxhYigiQXJlYSAoaGEpIHVzaW5nIDEwMCUgTUNQIikrCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIixzZT1GQUxTRSkrCiAgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSAyIHwgTm9uLVN1YnNpZGl6ZWQgKE93bCBIZWFkIEJ1dHRlcykgdnMuIFN1YnNpZGl6ZWQgKFN0b25lIENhbnlvbikgcG9wdWxhdGlvbiAxMDAlIE1DUHMgYWdhaW5zdCBudW1iZXIgXG4gb2YgZml4ZXMgb2YgdGhlIGNvbXBsZXRlIGRhdGEgc2V0LiIpKwogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpCiAgIyB0aGVtZV9idygpCgpHcmFwaDE8LUdyYXBoMSt0aGVtZShheGlzLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplID0gMTQpKQoKIyBsZWdlbmQgYXQgdG9wLWxlZnQsIGluc2lkZSB0aGUgcGxvdApTQ09ILmhyLmZpZzwtR3JhcGgxICsgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICBsZWdlbmQuanVzdGlmaWNhdGlvbj1jKDAsMSksCiAgICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbj1jKDAuMDUsIDAuOTUpLAogICAgICAgICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgbGVnZW5kLmtleSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQpTQ09ILmhyLmZpZwojIGRpci5jcmVhdGUoIm91dHB1dHMiKSAjIGNyZWF0ZSBhIG5ldyBmb2xkZXIgdG8gaG9sZCB0aGUgb3V0cHV0IGZpbGVzCiMgZ2dzYXZlKCJvdXRwdXRzL1NDX09IQl9wbG90LnBkZiIpCmBgYAoKCgoKYGBge3IgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgbWNwX2FuYWx5c2lzIDwtIGZ1bmN0aW9uKGZpbGVuYW1lLCBwZXJjZW50YWdlKXsKIyAgIGRhdGEgPC0gcmVhZC5jc3YoZmlsZSA9IGZpbGVuYW1lKQojICAgeCA8LSBhcy5kYXRhLmZyYW1lKGRhdGEkRUFTVElORykKIyAgIHkgPC0gYXMuZGF0YS5mcmFtZShkYXRhJE5PUlRISU5HKQojICAgeHkgPC0gYyh4LHkpCiMgICBkYXRhLnByb2ogPC0gU3BhdGlhbFBvaW50c0RhdGFGcmFtZSh4eSxkYXRhLCBwcm9qNHN0cmluZyA9IENSUy5TQykKIyAgIHh5IDwtIFNwYXRpYWxQb2ludHMoZGF0YS5wcm9qQGNvb3JkcykKIyAgIG1jcC5vdXQgPC0gbWNwKHh5LCBwZXJjZW50YWdlLCB1bm91dD0iaGEiKQojICAgYXJlYSA8LSBhcy5kYXRhLmZyYW1lKHJvdW5kKG1jcC5vdXRAZGF0YSRhcmVhLDQpKQojICAgLnJvd05hbWVzREYoYXJlYSwgbWFrZS5uYW1lcz1UUlVFKSA8LSBkYXRhJFlFQVIKIyAgIHdyaXRlLnRhYmxlKGFyZWEsZmlsZT0iTUNQX0hlY3RhcmVzLmNzdiIsCiMgICAgICAgICAgICAgICBhcHBlbmQ9VFJVRSxzZXA9IiwiLCBjb2wubmFtZXM9RkFMU0UsIHJvdy5uYW1lcz1UUlVFKQojICAgbWNwLnBvaW50cyA8LSBjYmluZCgoZGF0YS5mcmFtZSh4eSkpLGRhdGEkWUVBUikKIyAgIGNvbG5hbWVzKG1jcC5wb2ludHMpIDwtIGMoIngiLCJ5IiwgInllYXIiKQojICAgbWNwLnBvbHkgPC0gZm9ydGlmeShtY3Aub3V0LCByZWdpb24gPSAiaWQiKQojICAgdW5pdHMgPC0gZ3JpZC50ZXh0KHBhc3RlKHJvdW5kKG1jcC5vdXRAZGF0YSRhcmVhLDIpLCIgaGEiKSwgeD0wLjksICB5PTAuOTUsCiMgICAgICAgICAgICAgICAgICAgICAgZ3A9Z3Bhcihmb250ZmFjZT00LCBjZXg9MC45KSwgZHJhdyA9IEZBTFNFKQojICAgbWNwLnBsb3QgPC0gZ2dwbG90KCkgKwojICAgICBnZW9tX3BvbHlnb24oZGF0YT1tY3AucG9seSwgYWVzKHg9bWNwLnBvbHkkbG9uZywgeT1tY3AucG9seSRsYXQpLCBhbHBoYT0wLjUpICsKIyAgICAgZ2VvbV9wb2ludChkYXRhPW1jcC5wb2ludHMsIGFlcyh4PXgsIHk9eSkpICsgdGhlbWVfYncoKSArCiMgICAgIGxhYnMoeD0iRWFzdGluZyAobSkiLCB5PSJOb3J0aGluZyAobSkiLCB0aXRsZT1tY3AucG9pbnRzJHllYXIpICsKIyAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIiwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBoanVzdCA9IDAuNSkpICsKIyAgICAgYW5ub3RhdGlvbl9jdXN0b20odW5pdHMpCiMgICBtY3AucGxvdAojIH0KCmBgYAoKCgoKClRhYmxlIDIgfCBHcm91cCAxMDAlIE1DUCBob21lIHJhbmdlIG1lYW5zIG9mIHJhdyBkYXRhIG9mIFN0b25lIENhbnlvbiBhbmQgT3dsIEhlYWQgQnV0dGVzLiBHcm91cGVkIGJ5IGVudmlyb25tZW50IGFuZCBzZXguCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsaWJyYXJ5KFJtaXNjKQpZUl9HUlBfTWVhbnMgPC0gc3VtbWFyeVNFKHllYXIsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfMTAwbWNwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHZhcnM9YygiRW52aXJvbm1lbnQiLCJTZXgiKSxuYS5ybSA9IFRSVUUpCgprYWJsZShZUl9HUlBfTWVhbnMsIGZvcm1hdCA9ICJwYW5kb2MiLCAKICAgICAgY2FwdGlvbiA9ICdHcm91cCBNZWFucyBvZiBPdmVyYWxsIDEwMCUgTUNQIEhvbWUgUmFuZ2VzJykKYGBgCgoKClRhYmxlIDMgfCBHcm91cCA5NSUgTUNQIGhvbWUgcmFuZ2UgbWVhbnMgb2YgcmF3IGRhdGEgb2YgU3RvbmUgQ2FueW9uIGFuZCBPd2wgSGVhZCBCdXR0ZXMuIEdyb3VwZWQgYnkgZW52aXJvbm1lbnQgYW5kIHNleC4KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CllSX0dSUF9NZWFuczk1IDwtIHN1bW1hcnlTRSh5ZWFyLCBtZWFzdXJldmFyPSJIb21lX1JhbmdlXzk1bWNwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIsIlNleCIpLG5hLnJtID0gVFJVRSkKCmthYmxlKFlSX0dSUF9NZWFuczk1LCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdHcm91cCBNZWFucyBvZiBPdmVyYWxsIDk1JSBNQ1AgSG9tZQogICAgICBSYW5nZXMnKQpgYGAKCgoKCgoKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPkdpbGEgTW9uc3RlciBZZWFybHkgSG9tZSBSYW5nZSBTaGlmdHMgb2YgMTAwJSBNQ1BzLjwvc3Bhbj4KCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CkNSUy5TQzwtQ1JTKCIrcHJvaj11dG0gK3pvbmU9MTIgK2VsbHBzPVdHUzg0ICt1bml0cz1tICtub19kZWZzIikKCm1jcF9hbmFseXNpcy5QT0xZIDwtIGZ1bmN0aW9uKGZpbGVuYW1lLCBwZXJjZW50YWdlKXsKICBkYXRhIDwtIHJlYWQuY3N2KGZpbGUgPSBmaWxlbmFtZSxzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCiAgZGF0YS5zcCA8LSBkYXRhWywgYygiTElaQVJETlVNQkVSIiwgIkVBU1RJTkciLCAiTk9SVEhJTkciKV0KICBjb29yZGluYXRlcyhkYXRhLnNwKSA8LSBjKCJFQVNUSU5HIiwgIk5PUlRISU5HIikKICBwcm9qNHN0cmluZyhkYXRhLnNwKSA8LSBDUlMuU0MKICBtY3Bfb3V0IDwtIG1jcChkYXRhLnNwLCBwZXJjZW50YWdlLCB1bm91dD0iaGEiKQp9CgpNMjE1X21jcC4xMTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTIxNS8yMDExIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0yMTVfbWNwLjEyPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMjE1LzIwMTIgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEwNF9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMDQvMjAwOCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTA0X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEwNC8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLjA4PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0LzIwMDggLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLjExPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0LzIwMTEgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuMTI8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvMjAxMiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzN19tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvMjAxMSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvMjAxMSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC4xMjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny8yMDEyIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDA4IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDExIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMTI8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDEyIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni8yMDA4IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLjA4PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5LzIwMDggLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTE5X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTJfbWNwLjA3PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyLzIwMDcgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk02OV9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL002OS8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk02OV9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL002OS8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgojIyBGb3J0aWZ5IG1jcCBwb2x5Z29ucyBmb3IgZ2dwbG90MiAqWUVBUio6CkYxMDRfbWNwLjA4VCA8LSBmb3J0aWZ5KEYxMDRfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpGMTA0X21jcC4wOVQgPC0gZm9ydGlmeShGMTA0X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuMDhUIDwtIGZvcnRpZnkoRjExNF9tY3AuMDgsIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLjA5VCA8LSBmb3J0aWZ5KEYxMTRfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC4xMFQgPC0gZm9ydGlmeShGMTE0X21jcC4xMCwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuMTFUIDwtIGZvcnRpZnkoRjExNF9tY3AuMTEsIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLjEyVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLjEyLCByZWdpb24gPSAiaWQiKQpGMTM3X21jcC4wOVQgPC0gZm9ydGlmeShGMTM3X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuMTBUIDwtIGZvcnRpZnkoRjEzN19tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLjExVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLjExLCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC4wOVQgPC0gZm9ydGlmeShGMTQ3X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuMTBUIDwtIGZvcnRpZnkoRjE0N19tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLjExVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLjExLCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC4xMlQgPC0gZm9ydGlmeShGMTQ3X21jcC4xMiwgcmVnaW9uID0gImlkIikKRjM2X21jcC4wOFQgPC0gZm9ydGlmeShGMzZfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLjA5VCA8LSBmb3J0aWZ5KEYzNl9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuMTBUIDwtIGZvcnRpZnkoRjM2X21jcC4xMCwgcmVnaW9uID0gImlkIikKRjM2X21jcC4xMVQgPC0gZm9ydGlmeShGMzZfbWNwLjExLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLjEyVCA8LSBmb3J0aWZ5KEYzNl9tY3AuMTIsIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuMDhUIDwtIGZvcnRpZnkoRjY2X21jcC4wOCwgcmVnaW9uID0gImlkIikKRjY2X21jcC4wOVQgPC0gZm9ydGlmeShGNjZfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLjEwVCA8LSBmb3J0aWZ5KEY2Nl9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLjA4VCA8LSBmb3J0aWZ5KE0xMTlfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpNMTE5X21jcC4wOVQgPC0gZm9ydGlmeShNMTE5X21jcC4wOSwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuMTBUIDwtIGZvcnRpZnkoTTExOV9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLjA3VCA8LSBmb3J0aWZ5KE0xMTJfbWNwLjA3LCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC4wOVQgPC0gZm9ydGlmeShNMTEyX21jcC4wOSwgcmVnaW9uID0gImlkIikKTTExMl9tY3AuMTBUIDwtIGZvcnRpZnkoTTExMl9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCk02OV9tY3AuMDlUIDwtIGZvcnRpZnkoTTY5X21jcC4wOSwgcmVnaW9uID0gImlkIikKTTY5X21jcC4xMFQgPC0gZm9ydGlmeShNNjlfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpNMjE1X21jcC4xMVQgPC0gZm9ydGlmeShNMjE1X21jcC4xMSwgcmVnaW9uID0gImlkIikKTTIxNV9tY3AuMTJUIDwtIGZvcnRpZnkoTTIxNV9tY3AuMTIsIHJlZ2lvbiA9ICJpZCIpCgoKbWNwLnNoaWZ0LlRFU1Q0IDwtIGdncGxvdCgpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTA0X21jcC4wOFQsIGFlcyh4PUYxMDRfbWNwLjA4VCRsb25nLCB5PUYxMDRfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMDRfbWNwLjA5VCwgYWVzKHg9RjEwNF9tY3AuMDlUJGxvbmcsIHk9RjEwNF9tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuMDhULCBhZXMoeD1GMTE0X21jcC4wOFQkbG9uZywgeT1GMTE0X21jcC4wOFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4wOVQsIGFlcyh4PUYxMTRfbWNwLjA5VCRsb25nLCB5PUYxMTRfbWNwLjA5VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLjEwVCwgYWVzKHg9RjExNF9tY3AuMTBUJGxvbmcsIHk9RjExNF9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuMTFULCBhZXMoeD1GMTE0X21jcC4xMVQkbG9uZywgeT1GMTE0X21jcC4xMVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4xMlQsIGFlcyh4PUYxMTRfbWNwLjEyVCRsb25nLCB5PUYxMTRfbWNwLjEyVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLjA5VCwgYWVzKHg9RjEzN19tY3AuMDlUJGxvbmcsIHk9RjEzN19tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuMTBULCBhZXMoeD1GMTM3X21jcC4xMFQkbG9uZywgeT1GMTM3X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC4xMVQsIGFlcyh4PUYxMzdfbWNwLjExVCRsb25nLCB5PUYxMzdfbWNwLjExVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjA5VCwgYWVzKHg9RjE0N19tY3AuMDlUJGxvbmcsIHk9RjE0N19tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjEwVCwgYWVzKHg9RjE0N19tY3AuMTBUJGxvbmcsIHk9RjE0N19tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjExVCwgYWVzKHg9RjE0N19tY3AuMTFUJGxvbmcsIHk9RjE0N19tY3AuMTFUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjEyVCwgYWVzKHg9RjE0N19tY3AuMTJUJGxvbmcsIHk9RjE0N19tY3AuMTJUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuMDhULCBhZXMoeD1GMzZfbWNwLjA4VCRsb25nLCB5PUYzNl9tY3AuMDhUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT02KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4wOVQsIGFlcyh4PUYzNl9tY3AuMDlUJGxvbmcsIHk9RjM2X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLjEwVCwgYWVzKHg9RjM2X21jcC4xMFQkbG9uZywgeT1GMzZfbWNwLjEwVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NikgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuMTFULCBhZXMoeD1GMzZfbWNwLjExVCRsb25nLCB5PUYzNl9tY3AuMTFUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT02KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4xMlQsIGFlcyh4PUYzNl9tY3AuMTJUJGxvbmcsIHk9RjM2X21jcC4xMlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLjA4VCwgYWVzKHg9RjY2X21jcC4wOFQkbG9uZywgeT1GNjZfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuMDlULCBhZXMoeD1GNjZfbWNwLjA5VCRsb25nLCB5PUY2Nl9tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC4xMFQsIGFlcyh4PUY2Nl9tY3AuMTBUJGxvbmcsIHk9RjY2X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTEpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTE5X21jcC4wOFQsIGFlcyh4PU0xMTlfbWNwLjA4VCRsb25nLCB5PU0xMTlfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExOV9tY3AuMDlULCBhZXMoeD1NMTE5X21jcC4wOVQkbG9uZywgeT1NMTE5X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTlfbWNwLjEwVCwgYWVzKHg9TTExOV9tY3AuMTBUJGxvbmcsIHk9TTExOV9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTEyX21jcC4wN1QsIGFlcyh4PU0xMTJfbWNwLjA3VCRsb25nLCB5PU0xMTJfbWNwLjA3VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExMl9tY3AuMDlULCBhZXMoeD1NMTEyX21jcC4wOVQkbG9uZywgeT1NMTEyX21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTJfbWNwLjEwVCwgYWVzKHg9TTExMl9tY3AuMTBUJGxvbmcsIHk9TTExMl9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTMpICsKICAjIGdlb21fcG9seWdvbihkYXRhPU02OV9tY3AuMDlULCBhZXMoeD1NNjlfbWNwLjA5VCRsb25nLCB5PU02OV9tY3AuMDlUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1NNjlfbWNwLjEwVCwgYWVzKHg9TTY5X21jcC4xMFQkbG9uZywgeT1NNjlfbWNwLjEwVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIikgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9TTIxNV9tY3AuMTFULCBhZXMoeD1NMjE1X21jcC4xMVQkbG9uZywgeT1NMjE1X21jcC4xMVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIpICsKICAjIGdlb21fcG9seWdvbihkYXRhPU0yMTVfbWNwLjEyVCwgYWVzKHg9TTIxNV9tY3AuMTJUJGxvbmcsIHk9TTIxNV9tY3AuMTJUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siKSArCiAgdGhlbWVfYncoKSArbGFicyh4PSJFYXN0aW5nIChtKSIsIHk9Ik5vcnRoaW5nIChtKSIpICsKICBsYWJzKGNhcHRpb24gPSAiRmlndXJlIDQgIHwgIFllYXJseSBob21lIHJhbmdlIHNoaWZ0cyBvZiBzdWItc2FtcGxlZCBob21lIHJhbmdlcyBvZiA4IGxpemFyZHMsIGJvdGggbWFsZXMgYW5kIGZlbWFsZXMuIEhvbWUgXG4gcmFuZ2Ugc2hpZnRzIGFwcGVhciB0byBiZSByZWxhdGl2bGV5IHN0YWJsZSBvdmVyIHN0dWR5IHllYXJzLiIpKwogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpCiAgIyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSkKCm1jcC5zaGlmdC5URVNUNApgYGAKCgoKCgo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+UmVwZWF0ZWQgbWVhc3VyZXMgQU5PVkEgZm9yIFllYXJseSBIb21lIFJhbmdlcy48L3NwYW4+CgpSZXBlYXRlZCBNZWFzdXJlIEFOT1ZBIGZvciAxMDAlIE1DUCBvdmVyYWxsIGhvbWUgcmFuZ2VzCmBgYHtyIFJlcGVhdGVkIE1lYXN1cmVzIEFOT1ZBIFlFQVIsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIEdldCBwLXZhbHVlcyBmcm9tIG1peGVkIG1vZGVsIEYgdmFsdWVzOgpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkocmVhZHIpCnllYXIgPC0gcmVhZF9jc3YoIkdNX0NvbnNvbGlkYXRlZF9CeVllYXIuY3N2IikKClJNbW9kLnllYXI8LWxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrWWVhcitTZXgrTjEwMCtFbnZpcm9ubWVudCpTZXgrCiAgICAgICAgICAgICAgICAgICAoMXxHaWxhKSxkYXRhID0geWVhcikKc3VtbWFyeShSTW1vZC55ZWFyKQpgYGAKCgpBTk9WQSBUYWJsZTogMTAwJSBNQ1AKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KYW5vdmEoUk1tb2QueWVhcikKYGBgCgoKUmVwZWF0ZWQgTWVhc3VyZSBBTk9WQSBmb3IgOTUlIE1DUCBvdmVyYWxsIGhvbWUgcmFuZ2VzCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpSTW1vZC55ZWFyOTU8LWxtZXIoSG9tZV9SYW5nZV85NW1jcH5FbnZpcm9ubWVudCtZZWFyK1NleCtOMTAwK0Vudmlyb25tZW50KlNleCsKICAgICAgICAgICAgICAgICAgICgxfEdpbGEpLGRhdGEgPSB5ZWFyKQpzdW1tYXJ5KFJNbW9kLnllYXI5NSkKYGBgCgoKQU5PVkEgVGFibGU6IDk1JSBNQ1AKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmFub3ZhKFJNbW9kLnllYXI5NSkKYGBgCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KUk1tb2QueWVhcjEwMDwtbG1lcihIb21lX1JhbmdlXzEwMG1jcH5FbnZpcm9ubWVudCtZZWFyK1NleCtOMTAwK0Vudmlyb25tZW50KlNleCsoMXxHaWxhKSxkYXRhID0geWVhcikKClJNLm1hcmdpbmFsIDwtIGxzbWVhbnMoUk1tb2QueWVhcjEwMCwgCiAgICAgICAgICAgICAgICAgICAgfiBFbnZpcm9ubWVudCkKIyBSTS5tYXJnaW5hbAoKIyMgQ0FUQUdPUklaRSBMU00gR1JBUEggQlkgU0VYIEJFVFdFRU4gRU5WSVJPTk1FTlQ6CnJlZlJNX3NleCA8LSBsc21lYW5zKFJNbW9kLnllYXIxMDAsIHNwZWNzID0gYygiRW52aXJvbm1lbnQiLCJTZXgiKSkKCiMgcmVmUk1fc2V4CnJlZl9kZlJNX3NleCA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkocmVmUk1fc2V4KSkKcGRfUk0gPC0gcG9zaXRpb25fZG9kZ2UoMC4xKQoKeXIubWVhbi5hZGo8LWdncGxvdChyZWZfZGZSTV9zZXgsIGFlcyh4PVNleCx5PWxzbWVhbixncm91cD1FbnZpcm9ubWVudCkpKwogIGdlb21fcG9pbnQoYWVzKHNoYXBlID0gZmFjdG9yKEVudmlyb25tZW50KSksIHNpemUgPSAyLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC4xKSwgCiAgICAgICAgICAgIHNob3cubGVnZW5kID0gRkFMU0UpKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49bHNtZWFuLVNFLCB5bWF4PWxzbWVhbitTRSksIHdpZHRoPS4xLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkpKwogICMgZ2d0aXRsZSgiQWRqdXN0ZWQgSG9tZSBSYW5nZXMgYnkgU2V4IGFuZCBQb3B1bGF0aW9uICgxMDAlIE1DUCkiKSsKICB4bGFiKCJTZXgiKSsKICB5bGFiKCIiKQogICMgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSA1ICB8ICBBZGp1c3RlZCBob21lIHJhbmdlcyB1c2luZyAxMDAlIE1DUHMgYmV0d2VlbiBzZXhlcyBvZiBub24tc3Vic2lkaXplZCBhbmQgc3Vic2lkaXplZCBwb3B1bGF0aW9ucy4gXG4gQWRqdXN0ZWQgZm9yIGVudmlyb25tZW50LCB5ZWFyLCBzZXgsIGFuZCBzYW1wbGUgc2l6ZS4gTWFsZSBob21lIHJhbmdlcyByZW1haW5lZCBzbWFsbGVyIHRoYW4gdGhvc2Ugb2YgZmVtYWxlcyBhdCBcbiBPd2wgSGVhZCBCdXR0ZXMuIikrCiAgIyB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLGxpbmVoZWlnaHQgPSAwLjkpKQogICMgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgY29sb3I9ImJsYWNrIiwgc2l6ZT0xNCwgZmFjZT0iYm9sZCIpKQoKIyB5ci5tZWFuLmFkajwteXIubWVhbi5hZGogKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygwLDEpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbj1jKDAuMDUsIDAuOTUpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQojIHlyLm1lYW4uYWRqCiMgcm0oTFNNLlllYXJIUikKCnBkX1JNIDwtIHBvc2l0aW9uX2RvZGdlKDAuMSkKClJhdy5ZZWFySFI8LWdncGxvdChZUl9HUlBfTWVhbnMsIGFlcyh4PVNleCx5PUhvbWVfUmFuZ2VfMTAwbWNwLGdyb3VwPUVudmlyb25tZW50KSkrCiAgZ2VvbV9wb2ludChhZXMoc2hhcGUgPSBmYWN0b3IoRW52aXJvbm1lbnQpKSwgc2l6ZSA9IDIscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjEpKSsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUhvbWVfUmFuZ2VfMTAwbWNwLXNlLCB5bWF4PUhvbWVfUmFuZ2VfMTAwbWNwK3NlKSwKICAgICAgICAgICAgICAgIHdpZHRoPS4xLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkpKwogICMgZ2d0aXRsZSgiT3ZlcmFsbCBIb21lIFJhbmdlcyBieSBTZXggYW5kIFBvcHVsYXRpb24gKDEwMCUgTUNQKSIpKwogIHhsYWIoIlNleCIpKwogIHlsYWIoIjEwMCUgTUNQIEFyZWEgKGhhKSIpCiAgIyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBjb2xvcj0iYmxhY2siLCBzaXplPTE0LCBmYWNlPSJib2xkIikpCiAgIyBsYWJzKGNhcHRpb24gPSAiRmlndXJlIDMgfCBSYXcgb3ZlcmFsbCBtZWFuIGhvbWUgcmFuZ2VzIGJldHdlZW4gZW52aXJvbm1lbnQgYW5kIHNleCB1c2luZyAxMDAlIE1DUHMuIE5vdGUsIHRoYXQgYmVmb3JlIGFkanVzdGVkIFxuIGhvbWUgcmFuZ2VzLCBtYWxlcyBleGhpYml0IHNtYWxsZXIgb3ZlcmFsbCBob21lIHJhbmdlcyBhdCBTdG9uZSBDYW55b24sIHRoYW4gbWFsZXMgb2YgT3dsIEhlYWQgQnV0dGVzLiIpKwogICMgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkKCnlyLm1lYW4ucmF3PC1SYXcuWWVhckhSICsgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuanVzdGlmaWNhdGlvbj1jKDAsMSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbj1jKDAuMDUsIDAuOTUpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmtleSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQojIHlyLm1lYW4ucmF3CgpsaWJyYXJ5KGdyaWRFeHRyYSkKbGlicmFyeShncmlkKQoKZ3JpZC5hcnJhbmdlKHlyLm1lYW4ucmF3LCB5ci5tZWFuLmFkaiwgbnJvdyA9IDEsICAKICAgICAgICAgICAgIGJvdHRvbSA9IHRleHRHcm9iKCJGaWd1cmUgeCB8IGEuIFJhdyBncm91cCBtZWFucyBvZiBvdmVyYWxsIHllYXJseSBob21lIHJhbmdlcyBiZXR3ZWVuIG1hbGVzIGFuZCBmZW1hbGVzLiBOb3RlIHRoYXQgdGhlIG1hbGUgXG4gaG9tZSByYW5nZSBvZiB0aGUgc3Vic2lkaXplZCBwb3B1bGF0aW9uIGlzIHNtYWxsZXIgdGhhbiB0aGF0IG9mIHRoZSBmZW1hbGUgaG9tZSByYW5nZSBpbiB0aGUgbm9uLXN1YnNpZGl6ZWQgXG4gcG9wdWxhdGlvbi4gYi4gR3JvdXAgbWVhbnMgb2YgaG9tZSByYW5nZXMgYWZ0ZXIgYmVpbmcgYWRqdXN0ZWQgZm9yIGVudmlyb25tZW50LCB5ZWFyLCBzZXgsIGFuZCBzYW1wbGUgc2l6ZS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRmYWNlID0gMSxmb250c2l6ZSA9IDEwKSxoanVzdCA9IDAsIHggPSAwKSkKYGBgCgoKCgoKVGFibGUgNC4gRGlyZWN0aW9uYWwgbWVhbnMgb2YgaG9tZSByYW5nZSBhZnRlciBiZWluZyBhZGp1c3RlZCBmb3IgeWVhciwgc2V4IGFuZCBzYW1wbGUgc2l6ZS4KYGBge3IgZWNobz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmthYmxlKHJlZl9kZlJNX3NleCwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnQWRqdXN0ZWQgR3JvdXAgTWVhbnMgb2YgT3ZlcmFsbCBIb21lICAgUmFuZ2VzJykKYGBgCgogCiAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKUG9zdC1Ib2MgY29tcGFyaXNvbnMgYmV0d2VlbiBzZXhlcyBhbmQgZW52aXJvbm1lbnQ6CmBgYHtyIENvbXBzIGZvciBTZXgsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpSTW1vZC55ZWFyLkVtPC1sbWVyKEhvbWVfUmFuZ2VfMTAwbWNwfkVudmlyb25tZW50K1llYXIrU2V4K04xMDArRW52aXJvbm1lbnQqU2V4KwogICAgICAgICAgICAgICAgICAgICAgKDF8R2lsYSksZGF0YSA9IHllYXIpCgojIFNleC5lbW0ub2EgPC0gZW1tZWFucyhSTW1vZC55ZWFyLkVtLCBjKCJFbnZpcm9ubWVudCIsIlNleCIpKQojIHBhaXJzKFNleC5lbW0ub2EpCgplbW1fcy50MiA8LSBlbW1lYW5zKFJNbW9kLnllYXIuRW0sIHBhaXJ3aXNlIH4gU2V4IHwgRW52aXJvbm1lbnQpCmVtbV9zLnQyCmBgYAoKCgpHcmFwaGljYWwgQ29tcGFyaXNvbnMgb2YgU2V4IFdpdGhpbiBFYWNoIEVudmlyb25tZW50OgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KcGxvdChlbW1fcy50MiwgY29tcGFyaXNvbnMgPSBUUlVFLCB4bGFiID0gIkxlYXN0IFNxdWFyZSBNZWFuIChoYSkiLCB5bGFiID0gIkVudmlyb25tZW50IikKYGBgCkZpZ3VyZSA2IHwgUGFpcndpc2UgY29tcGFyaXNvbnMgb2YgaG9tZSByYW5nZSBiZXR3ZWVuIHNleGVzIHdpdGhpbiBlYWNoIGVudmlyb25tZW50LiBJZiByZWQgYXJyb3dzIG92ZXJsYXAgdGhvc2Ugb2Ygb3RoZXJzLCB0aGVuICB0aGVyZSBpcyBubyBzaWduaWZpY2FudCBzdGF0aXN0aWNhbCBkaWZmZXJlbmNlLiAKCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQplbW1fcy50MyA8LSBlbW1lYW5zKFJNbW9kLnllYXIuRW0sIHBhaXJ3aXNlIH4gRW52aXJvbm1lbnQgfCBTZXgpCmVtbV9zLnQzCmBgYAoKCgpHcmFwaGljYWwgQ29tcGFyaXNvbnMgb2YgU2V4IGJldHdlZW4gdGhlIHR3byBwb3B1bGF0aW9uczoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoZW1tX3MudDMsIGNvbXBhcmlzb25zID0gVFJVRSwgeGxhYiA9ICJMZWFzdCBTcXVhcmUgTWVhbiAoaGEpIiwgeWxhYiA9ICJFbnZpcm9ubWVudCIpCmBgYApGaWd1cmUgNyB8IFBhaXJ3aXNlIGNvbXBhcmlzb25zIG9mIHNleCBiZXR3ZWVuIGVudmlyb25tZW50cy4gSWYgcmVkIGFycm93cyBvdmVybGFwIHRob3NlIG9mIG90aGVycywgdGhlbiB0aGVyZSBpcyBubyBzaWduaWZpY2FudCBzdGF0aXN0aWNhbCBkaWZmZXJlbmNlLiAKIAogCiAKIAogCiAKQXQgU3RvbmUgQ2FueW9uLCBtYWxlIHllYXJseSBob21lIHJhbmdlcyByYW5nZWQgZnJvbSAxLjkxIC0gMjUuMSBoYSwgd2l0aCBhIG1lYW4gb2YgMTEuOCDCsSAxLjcgUy5FLiBoYSAoMTAwJSBNQ1ApLCA5LjIgwrEgMS4zIFMuRS4gSGEgKDk1JSBNQ1ApLiBGZW1hbGUgaG9tZSByYW5nZXMgcmFuZ2VkIGZyb20gMi4wNiDigJMgMzguODEgaGEgYW5kIGEgbWVhbiBvZiA5LjggwrEgMS4xIFMuRS4gaGEgKDEwMCUgTUNQKSwgNy4xIMKxIDAuNyBTLkUuIGhhICg5NSUgTUNQKS4gTWFsZSBHaWxhIE1vbnN0ZXJzIGF0IE93bCBoZWFkIEJ1dHRlcyBoYWQgaG9tZSByYW5nZXMgdGhhdCByYW5nZWQgZnJvbSAxMC42IOKAkyA4Mi43IGhhIHdpdGggYSBtZWFuIG9mIDQzLjIgwrEgNS43IFMuRS4gaGEgKDEwMCUgTUNQKSwgNDEuOSDCsSA0LjkgUy5FLiBoYSAoOTUlIE1DUCkuIEZlbWFsZSBob21lIHJhbmdlcyByYW5nZWQgZnJvbSA3LjEg4oCTIDQ3LjYgd2l0aCBhIG1lYW4gb2YgMjIuMCDCsSAzLjcgUy5FLiBoYSAoMTAwJSBNQ1ApLCAyMC42IMKxIDIuNSBTLkUuIGhhICg5NSUgTUNQKS4gSW4gdGhlIGFuYWx5c2VzIG9mIGJvdGggcG9wdWxhdGlvbnMsIHllYXIgaGFkIG5vIGVmZmVjdCBvbiBob21lIHJhbmdlIHNpemVzIChGID0gMC4zOCwgUCA9IDAuNTQpLCB3aGlsZSB0aGVyZSB3YXMgYSBkZXRlY3RlZCBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIGhvbWUgcmFuZ2VzIGJldHdlZW4gdGhlIHR3byBwb3B1bGF0aW9ucyAoRiA9IDguMzUsIFAgPSAwLjAwNSksIGFzIHdlbGwgYXMgc2V4IChGID0gMTYuNjgsIFAgPSAwLjAwMDQpLiBQb3N0LUhvYyBhbmFseXNlcyBiZXR3ZWVuIHNleGVzIGluZGljYXRlZCB0aGF0IHRoZXJlIHdhcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gbWFsZSBob21lIHJhbmdlcyBiZXR3ZWVuIHRoZSB0d28gZW52aXJvbm1lbnRzIChkZiA9IDY4LjMsIFAgPSAwLjAwMSkuIFRoZXJlIHdhcyBhIHNsaWdodCBkaWZmZXJlbmNlIG9mIGZlbWFsZSBob21lIHJhbmdlcyBiZXR3ZWVuIHRoZSB0d28gZW52aXJvbm1lbnRzLCBob3dldmVyIGl0IHdhcyBub3Qgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCAoZGYgPSA2OC43LCBQID0gMC4wNykuIEF0IHN0b25lIGNhbnlvbiB0aGVyZSB3YXMgbm8gbWFqb3IgZGlmZmVyZW5jZSBiZXR3ZWVuIG1hbGUgYW5kIGZlbWFsZSBob21lIHJhbmdlcyAoZGYgPSAzMS44LCBQID0gMC4xNikgd2l0aCBtYWxlIGhvbWUgcmFuZ2UgYmVpbmcgb25seSAzJSBsYXJnZXIgdGhhbiBmZW1hbGVzLiBNYWxlcyBhdCBPd2wgSGVhZCBCdXR0ZXMgaGFkIGEgNjUlIGxhcmdlciBob21lIHJhbmdlIHRoYW4gZGlkIGZlbWFsZXMsIGFuZCB3YXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCAoZGYgPSAzMS4zLCBQID0gMC4wMDAzKS4gSW50ZXJlc3RpbmdseSwgbWFsZXMgYXQgU3RvbmUgQ2FueW9uIGhhZCBzbWFsbGVyIGhvbWUgcmFuZ2VzIHRoYW4gZGlkIHRoZSBmZW1hbGVzIGF0IE93bCBIZWFkIEJ1dHRlcyAoVGFibGUgeCkgV2hlbiB1c2luZyA5NSUgTUNQcywgbWFsZSBob21lIHJhbmdlcyByZWR1Y2VkIGJ5IDI1JSBhbmQgZmVtYWxlIHJhbmdlIGJ5IDMxJS4gQXQgT3dsIEhlYWQgQnV0dGVzLCBHaWxhIE1vbnN0ZXJzIHNob3dlZCBhIHNpbWlsYXIgYmVoYXZpb3Igd2l0aCBtYWxlIGhvbWUgcmFuZ2VzIHJlZHVjZWQgYnkgMjAlIGFuZCBmZW1hbGUgcmFuZ2VzIHJlZHVjZWQgYnkgMjYlIHVzaW5nIDk1JSBNQ1BzLiAKICAKIAogCiAKCiAKIAojIyBPdmVyYWxsIFllYXJseSBIb21lIFJhbmdlcyAoS0RFKQoKCkhvbWUgcmFuZ2UgZXN0aW1hdGlvbiBvbiB0aGUgU3RvbmUgQ2FueW9uIEdpbGEgTW9uc3RlcnMgdXNpbmcgOTUlIEtERXMgd2l0aCBocmVmIGJhbmR3aWR0aCBwcm9kdWNlZCBtYWxlIGhvbWUgcmFuZ2VzIHJhbmdpbmcgZnJvbSAxNC41IOKAkyA1NS4zIGhhIHdpdGggYSBtZWFuIG9mIDM1LjAgwrEgMy4zIFMuRS4gaGEuIEZlbWFsZSBob21lIHJhbmdlcyByYW5nZWQgZnJvbSAxMC4xIOKAkyA0Ny44IGhhIHdpdGggYSBtZWFuIG9mIDIyLjkgwrEgMS44IFMuRS4gS0RFIGVzdGltYXRlcyBmb3IgbWFsZSBhbmQgZmVtYWxlIGhvbWUgcmFuZ2VzIHdlcmUgOTYlIGFuZCA4MCUgbGFyZ2VyIHRoYW4gTUNQIGVzdGltYXRlcy4gUmVwZWF0ZWQgTWVhc3VyZXMgYW5hbHlzaXMgb2YgS0RFcyBzdWdnZXN0ZWQgdGhhdCB0aGVyZSB3YXMgYSBzbWFsbCBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGJldHdlZW4gbWFsZSBhbmQgZmVtYWxlIGhvbWUgcmFuZ2VzIGF0IFN0b25lIENhbnlvbiAoRiA9IDUuNTYsIFAgPSAwLjAwOSkuIFllYXIgZGlkIG5vdCBoYXZlIGFuIGVmZmVjdCBvbiBob21lIHJhbmdlcyAoRiA9IDAuNTcsIFAgPSAwLjQ1KS4gCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQp5ZWFyLmtkZTwtcmVhZF9jc3YoJ3llYXJseSBrZGUgdGFibGUuY3N2JykKa2FibGUoeWVhci5rZGUsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1llYXJseSBLREUgSG9tZSBSYW5nZXMnKQpgYGAKCgoKCgoKVGFibGUgIHwgUmF3IEdyb3VwIDk1JSBLREUgaG9tZSByYW5nZSBtZWFucyBvZiBTdG9uZSBDYW55b24gYW5kIE93bCBIZWFkIEJ1dHRlcy4gR3JvdXBlZCBieSBlbnZpcm9ubWVudCBhbmQgc2V4LgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0Kc3ViIDwtIHN1YnNldCh5ZWFyLCBFbnZpcm9ubWVudCA9PSAic3Vic2lkaXplZCIpCgpZUl9HUlBfTWVhbnMuS0RFIDwtIHN1bW1hcnlTRShzdWIsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfOTVrZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoIlNleCIpLG5hLnJtID0gVFJVRSkKCmthYmxlKFlSX0dSUF9NZWFucy5LREUsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1JhdyBHcm91cCBNZWFucyBvZiBPdmVyYWxsIDk1JSBLREUgSG9tZQogICAgICBSYW5nZXMnKQpgYGAKIAoKCiAKIAogCiAKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPlJlcGVhdGVkIG1lYXN1cmVzIEFOT1ZBIGZvciBLREUgSG9tZSBSYW5nZXMuPC9zcGFuPgoKUmVwZWF0ZWQgTWVhc3VyZSBBTk9WQSBmb3IgOTUlIEtERSBvdmVyYWxsIGhvbWUgcmFuZ2VzCmBgYHtyIFJlcGVhdGVkIE1lYXN1cmVzIEFOT1ZBIEtERSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgR2V0IHAtdmFsdWVzIGZyb20gbWl4ZWQgbW9kZWwgRiB2YWx1ZXM6CgpSTS5LREVtb2QueWVhcjwtbG1lcihIb21lX1JhbmdlXzk1a2RlflllYXIrU2V4K04rKDF8R2lsYSksZGF0YSA9IHN1YikKCnN1bW1hcnkoUk0uS0RFbW9kLnllYXIpCmBgYAogCkFOT1ZBIFRhYmxlIGZvciA5NSUgS0RFIChzdWJzaWRpemVkKQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KYW5vdmEoUk0uS0RFbW9kLnllYXIpCmBgYAoKCgoKUmVwZWF0ZWQgTWVhc3VyZSBBTk9WQSBmb3IgNTAlIEtERSBvdmVyYWxsIGhvbWUgcmFuZ2VzCmBgYHtyIFJlcGVhdGVkIE1lYXN1cmVzIEFOT1ZBNTAlIEtERSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgR2V0IHAtdmFsdWVzIGZyb20gbWl4ZWQgbW9kZWwgRiB2YWx1ZXM6CgpSTS5LREUuNTAubW9kLnllYXI8LWxtZXIoSG9tZV9SYW5nZV81MGtkZX5ZZWFyK1NleCtOKygxfEdpbGEpLGRhdGEgPSBzdWIpCgpzdW1tYXJ5KFJNLktERS41MC5tb2QueWVhcikKYGBgCgoKQU5PVkEgVGFibGUgZm9yIDUwJSBLREUgKHN1YnNpZGl6ZWQpCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphbm92YShSTS5LREUuNTAubW9kLnllYXIpCmBgYAogCiAKCiAKIApgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KbGlicmFyeShncmlkRXh0cmEpCmxpYnJhcnkoZ3JpZCkKClJhdy5LREUuSFI8LWdncGxvdChZUl9HUlBfTWVhbnMuS0RFLCBhZXMoeD1TZXgseT1Ib21lX1JhbmdlXzk1a2RlKSkrCiAgZ2VvbV9wb2ludChzaXplID0gMiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjEpKSsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUhvbWVfUmFuZ2VfOTVrZGUtc2UsIHltYXg9SG9tZV9SYW5nZV85NWtkZStzZSksCiAgICAgICAgICAgICAgICB3aWR0aD0uMSxwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsKICAjIGdndGl0bGUoIk92ZXJhbGwgSG9tZSBSYW5nZXMgYnkgU2V4IGFuZCBQb3B1bGF0aW9uICgxMDAlIE1DUCkiKSsKICB4bGFiKCJTZXgiKSsKICB5bGFiKCI5NSUgS0RFIEFyZWEgKGhhKSIpKwogICAjIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgOCAgfCAgUmF3IDk1JSBLREUgaG9tZSByYW5nZXMgYmV0d2VlbiBtYWxlIGFuZCBmZW1hbGUgaG9tZSByYW5nZXMgYXQgU3RvbmUgQ2FueW9uLiIpKwogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpCiAgIyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBjb2xvcj0iYmxhY2siLCBzaXplPTE0LCBmYWNlPSJib2xkIikpCgpSYXcuS0RFLkhSPC1SYXcuS0RFLkhSICsgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuanVzdGlmaWNhdGlvbj1jKDAsMSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbj1jKDAuMDUsIDAuOTUpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmtleSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQojIFJhdy5LREUuSFIKClJNLktERW1vZC55ZWFyPC1sbWVyKEhvbWVfUmFuZ2VfOTVrZGV+WWVhcitTZXgrTisoMXxHaWxhKSxkYXRhID0gc3ViKQoKS0RFLm1hcmdpbmFsIDwtIGxzbWVhbnMoUk0uS0RFbW9kLnllYXIsIAogICAgICAgICAgICAgICAgICAgIH4gU2V4KQojIFJNLm1hcmdpbmFsCgojIyBDQVRBR09SSVpFIExTTSBHUkFQSCBCWSBTRVggQkVUV0VFTiBFTlZJUk9OTUVOVDoKcmVmUk1fS0RFIDwtIGxzbWVhbnMoUk0uS0RFbW9kLnllYXIsIHNwZWNzID0gYygiU2V4IikpCgojIHJlZlJNX3NleApyZWZfZGZSTV9LREUgPC0gYXMuZGF0YS5mcmFtZShzdW1tYXJ5KHJlZlJNX0tERSkpCnBkX1JNIDwtIHBvc2l0aW9uX2RvZGdlKDAuMSkKCkxTTS5LREUuSFI8LWdncGxvdChyZWZfZGZSTV9LREUsIGFlcyh4PVNleCx5PWxzbWVhbikpKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjEpKSsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPWxzbWVhbi1TRSwgeW1heD1sc21lYW4rU0UpLCB3aWR0aD0uMSxwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsKICAjIGdndGl0bGUoIkFkanVzdGVkIEhvbWUgUmFuZ2VzIGJ5IFNleCBhbmQgUG9wdWxhdGlvbiAoMTAwJSBNQ1ApIikrCiAgeGxhYigiU2V4IikrCiAgeWxhYigiIikKICAjIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgOCAgfCAgQWRqdXN0ZWQgOTUlIEtERSBob21lIHJhbmdlcyBiZXR3ZWVuIG1hbGUgYW5kIGZlbWFsIGhvbWUgcmFuZ2VzIGF0IFN0b25lIENhbnlvbi4gQWRqdXN0ZWQgb24geWVhciwgXG4gc2V4LCBhbmQgc2FtcGxlIHNpemUuIikrCiAgIyB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLGxpbmVoZWlnaHQgPSAwLjkpKQogICMgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgY29sb3I9ImJsYWNrIiwgc2l6ZT0xNCwgZmFjZT0iYm9sZCIpKQoKIyBMU00uS0RFLkhSPC1MU00uS0RFLkhSICsgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKIyAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249YygwLjA1LCAwLjk1KSwKIyAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKIyBMU00uS0RFLkhSCgpncmlkLmFycmFuZ2UoUmF3LktERS5IUiwgTFNNLktERS5IUiwgbnJvdyA9IDEsICAKICAgICAgICAgICAgIGJvdHRvbSA9IHRleHRHcm9iKCJGaWd1cmUgeCB8IGEuIFJhdyBncm91cCBtZWFucyBvZiBvdmVyYWxsIHllYXJseSA5NSUgS0RFcyBiZXR3ZWVuIG1hbGVzIGFuZCBmZW1hbGVzIGF0IFN0b25lIENhbnlvbi4gXG4gYi4gQWRqdXN0ZWQgOTUlIEtERXMgYWZ0ZXIgYmVpbmcgYWRqdXN0ZWQgZm9yICB5ZWFyLCBzZXgsIGFuZCBzYW1wbGUgc2l6ZS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRmYWNlID0gMSxmb250c2l6ZSA9IDEwKSxoanVzdCA9IDAsIHggPSAwKSkKYGBgCgogCiAKIApUYWJsZSAgfCBEaXJlY3Rpb25hbCBtZWFucyBvZiBLREUgaG9tZSByYW5nZXMgYWZ0ZXIgYmVpbmcgYWRqdXN0ZWQgZm9yIHllYXIsIHNleCBhbmQgc2FtcGxlIHNpemUuCmBgYHtyIGVjaG89RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQprYWJsZShyZWZfZGZSTV9LREUsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ0FkanVzdGVkIEtERSBHcm91cCBNZWFucyBvZiBPdmVyYWxsIEhvbWUgUmFuZ2VzJykKYGBgCiAKIAoKCgoKIAogCiAKIAojIFNlYXNvbmFsIEhvbWUgUmFuZ2UKIAo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+U2Vhc29uYWwgSG9tZSBSYW5nZS48L3NwYW4+CgoKSG9tZSByYW5nZSBhbmFseXNpcyBicm9rZW4gZG93biBieSBmaXZlIHNlYXNvbnM7IEVtZXJnZW5jZSwgRHJ5LCBNb25zb29uLCBQb3N0IE1vbnNvb24uIFRoZSBzdGFydCBvZiBlbWVyZ2VuY2Ugd2FzIGRlZmluZWQgYnkgd2hlbiBtb3ZlbWVudCBwYXR0ZXJucyBpbmNyZWFzZWQgZnJvbSBub25lL21pbmltYWwgdG8gdGhlIHN0YXJ0IG9mIGhpZ2ggYWN0aXZpdHkuIEVmZm9ydCB3YXMgdGFrZW4gdG8gbWF0Y2ggYXMgY2xvc2VseSBhcyBwb3NzaWJsZSB0byB0aGUgT3dsIEhlYWQgQnV0dGVzIGVtZXJnZW5jZSBkYXRlIGludGVydmFsLiBNb25zb29uIHNlYXNvbiB3YXMgYWRqdXN0ZWQgdXNpbmcgTk9BQSBjbGltYXRlIGRhdGEuIFRoZSBzdGFydCBvZiB3YXMgZGVmaW5lZCB3aGVuIHRoZSBtZWFuIGRldyBwb2ludCB0ZW1wZXJhdHVyZXMgb2YgdGhyZWUgY29uc2VjdXRpdmUgZGF5cyB3ZXJlIGdyZWF0ZXIgdGhhbiA1NSBkZWdyZWVzLiAKClNjYWxpbmcgaG9tZSByYW5nZSBhbmFseXNlcyBieSBzZWFzb25hbCBlc3RpbWF0ZXMgcmVkdWNlcyB0aGUgbnVtYmVyIG9yIGxvY2F0aW9ucyBmb3IgZWFjaCBsaXphcmQuIDEwMCUgTUNQcyB3ZXJlIHVzZWQgZm9yIHNlYXNvbmFsIGhvbWUgcmFuZ2UgYW5hbHlzZXMgdG8gYXZvaWQgYW55IGZ1cnRoZXIgcmVkdWN0aW9uIG9mIGxvY2F0aW9ucyBmb3IgZWFjaCBlc3RpbWF0aW9uLgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIyBDcmVhdGUgTUNQIHBvbHlnb25zIGJ5IFNFQVNPTjoKTTIxNV9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL00yMTUvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0yMTVfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTIxNS9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTIxNV9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMjE1L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCk0xMTJfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyL01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpNMTE5X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5L1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKRjExNF9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMTM3X21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzN19tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkYxNDdfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3L0VtZXJnZW5jZSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3L1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKRjI1Ml9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YyNTIvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYyNTJfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjI1Mi9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjI1Ml9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMjUyL01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjI1Ml9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YyNTIvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMzZfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGNjZfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGNjZfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgojIyBGb3J0aWZ5IG1jcCBwb2x5Z29ucyBmb3IgZ2dwbG90MiAqU0VBU09OKjoKTTIxNV9tY3AuRU1UIDwtIGZvcnRpZnkoTTIxNV9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCk0yMTVfbWNwLkRSWVQgPC0gZm9ydGlmeShNMjE1X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCk0yMTVfbWNwLk1PTlQgPC0gZm9ydGlmeShNMjE1X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCgpNMTEyX21jcC5EUllUIDwtIGZvcnRpZnkoTTExMl9tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC5NT05UIDwtIGZvcnRpZnkoTTExMl9tY3AuTU9OLCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC5QTVQgPC0gZm9ydGlmeShNMTEyX21jcC5QTSwgcmVnaW9uID0gImlkIikKCk0xMTlfbWNwLkRSWVQgPC0gZm9ydGlmeShNMTE5X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLk1PTlQgPC0gZm9ydGlmeShNMTE5X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLlBNVCA8LSBmb3J0aWZ5KE0xMTlfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjExNF9tY3AuRU1UIDwtIGZvcnRpZnkoRjExNF9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLkRSWVQgPC0gZm9ydGlmeShGMTE0X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLk1PTlQgPC0gZm9ydGlmeShGMTE0X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLlBNVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjEzN19tY3AuRU1UIDwtIGZvcnRpZnkoRjEzN19tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLkRSWVQgPC0gZm9ydGlmeShGMTM3X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLk1PTlQgPC0gZm9ydGlmeShGMTM3X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLlBNVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjE0N19tY3AuRU1UIDwtIGZvcnRpZnkoRjE0N19tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLkRSWVQgPC0gZm9ydGlmeShGMTQ3X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLk1PTlQgPC0gZm9ydGlmeShGMTQ3X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLlBNVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjI1Ml9tY3AuRU1UIDwtIGZvcnRpZnkoRjI1Ml9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYyNTJfbWNwLkRSWVQgPC0gZm9ydGlmeShGMjUyX21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYyNTJfbWNwLk1PTlQgPC0gZm9ydGlmeShGMjUyX21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYyNTJfbWNwLlBNVCA8LSBmb3J0aWZ5KEYyNTJfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjM2X21jcC5FTVQgPC0gZm9ydGlmeShGMzZfbWNwLkVNLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLkRSWVQgPC0gZm9ydGlmeShGMzZfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjM2X21jcC5NT05UIDwtIGZvcnRpZnkoRjM2X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuUE1UIDwtIGZvcnRpZnkoRjM2X21jcC5QTSwgcmVnaW9uID0gImlkIikKCkY2Nl9tY3AuRU1UIDwtIGZvcnRpZnkoRjY2X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjY2X21jcC5EUllUIDwtIGZvcnRpZnkoRjY2X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuTU9OVCA8LSBmb3J0aWZ5KEY2Nl9tY3AuTU9OLCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLlBNVCA8LSBmb3J0aWZ5KEY2Nl9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgptY3Auc2hpZnQuVEVTVDUgPC0gZ2dwbG90KCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLkVNVCwgYWVzKHg9RjExNF9tY3AuRU1UJGxvbmcsIHk9RjExNF9tY3AuRU1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC5EUllULCBhZXMoeD1GMTE0X21jcC5EUllUJGxvbmcsIHk9RjExNF9tY3AuRFJZVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJyZWQiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC5NT05ULCBhZXMoeD1GMTE0X21jcC5NT05UJGxvbmcsIHk9RjExNF9tY3AuTU9OVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJncmVlbiIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLlBNVCwgYWVzKHg9RjExNF9tY3AuUE1UJGxvbmcsIHk9RjExNF9tY3AuUE1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuRU1ULCBhZXMoeD1GMTM3X21jcC5FTVQkbG9uZywgeT1GMTM3X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLkRSWVQsIGFlcyh4PUYxMzdfbWNwLkRSWVQkbG9uZywgeT1GMTM3X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLk1PTlQsIGFlcyh4PUYxMzdfbWNwLk1PTlQkbG9uZywgeT1GMTM3X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuUE1ULCBhZXMoeD1GMTM3X21jcC5QTVQkbG9uZywgeT1GMTM3X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTQ3X21jcC5FTVQsIGFlcyh4PUYxNDdfbWNwLkVNVCRsb25nLCB5PUYxNDdfbWNwLkVNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuRFJZVCwgYWVzKHg9RjE0N19tY3AuRFJZVCRsb25nLCB5PUYxNDdfbWNwLkRSWVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuTU9OVCwgYWVzKHg9RjE0N19tY3AuTU9OVCRsb25nLCB5PUYxNDdfbWNwLk1PTlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iZ3JlZW4iLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTQ3X21jcC5QTVQsIGFlcyh4PUYxNDdfbWNwLlBNVCRsb25nLCB5PUYxNDdfbWNwLlBNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9RjI1Ml9tY3AuRU1ULCBhZXMoeD1GMjUyX21jcC5FTVQkbG9uZywgeT1GMjUyX21jcC5FTVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MikgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9RjI1Ml9tY3AuRFJZVCwgYWVzKHg9RjI1Ml9tY3AuRFJZVCRsb25nLCB5PUYyNTJfbWNwLkRSWVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9RjI1Ml9tY3AuTU9OVCwgYWVzKHg9RjI1Ml9tY3AuTU9OVCRsb25nLCB5PUYyNTJfbWNwLk1PTlQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NCkgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9RjI1Ml9tY3AuUE1ULCBhZXMoeD1GMjUyX21jcC5QTVQkbG9uZywgeT1GMjUyX21jcC5QTVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuRU1ULCBhZXMoeD1GMzZfbWNwLkVNVCRsb25nLCB5PUYzNl9tY3AuRU1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLkRSWVQsIGFlcyh4PUYzNl9tY3AuRFJZVCRsb25nLCB5PUYzNl9tY3AuRFJZVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJyZWQiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLk1PTlQsIGFlcyh4PUYzNl9tY3AuTU9OVCRsb25nLCB5PUYzNl9tY3AuTU9OVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJncmVlbiIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuUE1ULCBhZXMoeD1GMzZfbWNwLlBNVCRsb25nLCB5PUYzNl9tY3AuUE1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC5FTVQsIGFlcyh4PUY2Nl9tY3AuRU1UJGxvbmcsIHk9RjY2X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuRFJZVCwgYWVzKHg9RjY2X21jcC5EUllUJGxvbmcsIHk9RjY2X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuTU9OVCwgYWVzKHg9RjY2X21jcC5NT05UJGxvbmcsIHk9RjY2X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC5QTVQsIGFlcyh4PUY2Nl9tY3AuUE1UJGxvbmcsIHk9RjY2X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICB0aGVtZV9idygpICsKICBsYWJzKHg9IkVhc3RpbmcgKG0pIiwgeT0iTm9ydGhpbmcgKG0pIikgKwogIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgIHwgIFNlYXNvbmFsIGhvbWUgcmFuZ2Ugc2hpZnRzIG9mIGZpdmUgbGl6YXJkcy4gRW1lcmdlbmNlIGFuZCBwb3N0LW1vbnNvb24gcmFuZ2VzIHN0YXkgcmVhbGF0aXZlbHkgd2l0aGluIFxuIGVhY2ggb3RoZXIuIEFsbCBzZWFzb25hbCBwb2x5Z29ucyBzdGF5IHJlbGF0aXZlbHkgc3RhYmxlIHdpdGhvdXQgYW55IG1ham9yIHNoaWZ0cyBhd2F5IGZyb20gb3RoZXIgc2Vhc29uYWwgcmFuZ2VzLiIpKwogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIsIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgaGp1c3QgPSAwLjUpKQoKbWNwLnNoaWZ0LlRFU1Q1CmBgYAoKCgoKCgoKU2Vhc29uYWwgaG9tZSByYW5nZXMgYXQgU3RvbmUgQ2FueW9uIHZhcmllZCBpbiBzaXplIGJldHdlZW4gc2Vhc29ucyBidXQgZGlkIG5vdCBzZWVtIHNoaWZ0IChGaWcuX19fKSwgd2l0aCBzZWFzb25hbCBob21lIHJhbmdlcyBvdmVybGFwcGluZyBlYWNoIG90aGVyLCBvbmx5IGV4cGFuZGluZyBvciBjb2xsYXBzaW5nIGJldHdlZW4gc2Vhc29ucy4gSG9tZSByYW5nZSBwYXR0ZXJucyBhdCBTdG9uZSBDYW55b24gZGlkIG5vdCBkaXNwbGF5IHRoZSBzYW1lIHNlYXNvbmFsIHZhcmlhdGlvbiBpbiBob21lIHJhbmdlIHNpemVzIHRoYXQgd2FzIG9ic2VydmVkIGF0IE93bCBIZWFkIEJ1dHRlcy4gQXQgU3RvbmUgQ2FueW9uLCBHaWxhIE1vbnN0ZXJzIGhhZCByZWxhdGl2ZWx5IHNtYWxsZXIgaG9tZSByYW5nZXMgdGhyb3VnaG91dCB0aGUgeWVhciwgd2hlcmUgdGhlIGhpZ2hlc3QgaW5mbGF0aW9uIG9mIHJhbmdlIHNpemUgd2FzIG9ic2VydmVkIGR1cmluZyB0aGUgZHJ5IHNlYXNvbiBmcm9tIGFuIGluY3JlYXNlIGluIG1hbGUgaG9tZSByYW5nZXMsIDE4LjIgwrEgNS40IFMuRS4gaGEgdG8gdGhhdCBvZiBmZW1hbGUgaG9tZSByYW5nZSBzaXplcyBhdCAxMC4xIMKxIDIuNCBTLkUuIGhhLiBGZW1hbGVzIGF0IFN0b25lIENhbnlvbiBkaXNwbGF5ZWQgc2ltaWxhciBob21lIHJhbmdlcyBkdXJpbmcgdGhlIG1vbnNvb24gc2Vhc29uLCAxMC42IMKxIDIuNSBTLkUuIGhhLiBIb21lIHJhbmdlIHNpemVzIGF0IE93bCBIZWFkIEJ1dHRlcyBoYWQgYSBtdWNoIGxhcmdlciBhbW91bnQgb2YgdmFyaWF0aW9uIGFjcm9zcyBzZWFzb25zIHRoYW4gZGlkIHRob3NlIGF0IFN0b25lIENhbnlvbi4gVGhlcmUgd2VyZSBzdGlsbCBzbGlnaHRseSBsYXJnZXIgcmFuZ2VzIG9ic2VydmVkIGR1cmluZyB0aGUgZHJ5IHNlYXNvbiwgcHJpbWFyaWx5IGR1ZSB0byBpbmNyZWFzZWQgaG9tZSByYW5nZSBzaXplcyBleGhpYml0ZWQgYnkgbWFsZXMgMjkuNCDCsSA0LjcgUy5FLiBoYSB2ZXJzdXMgZmVtYWxlcyBhdCAxNS42IMKxIDMuOCBTLkUuIGhhLiBEdXJpbmcgdGhlIG1vbnNvb24gc2Vhc29uLCB0aGVyZSB3YXMgc3RpbGwgeWV0IGEgbGFyZ2UgaW5mbHV4IG9mIGhvbWUgcmFuZ2VzIHNpemVzIHdoZXJlIGZlbWFsZSBob21lIHJhbmdlcyBpbmNyZWFzZWQgdG8gMjIuOSDCsSA0LjAgUy5FLiBoYS4gIEZvciBib3RoIHBvcHVsYXRpb25zLCBob21lIHJhbmdlcyBkdXJpbmcgdGhlIGVtZXJnZW5jZSBhbmQgcG9zdC1tb25zb29uIHNlYXNvbnMgd2VyZSBzbWFsbCwgbWFya2luZyB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgb2Ygb3ZlcndpbnRlcmluZyBwZXJpb2RzLCB3aGVyZSBtaW5pbWFsIG1vdmVtZW50IGlzIG9ic2VydmVkIGluIGJvdGggZ3JvdXBzLiAKICAKQW5hbHlzaXMgaW5kaWNhdGVkIHRoYXQgdGhlcmUgd2FzIGFuIGVmZmVjdCBvZiBzZWFzb24gKGRmID0gMywgRiA9IDE1LjQxLCBQID0gPDAuMDAxKSBhcyB3ZWxsIGFzIGFuIGludGVyYWN0aW9uIG9mIGVudmlyb25tZW50IGFuZCBzZWFzb24gKGRmID0gMywgRiA9IDYuODQsIFAgPSA8MC4wMDEpLCBpbmRpY2F0aW5nIHRoYXQgY2hhbmdlcyBpbiBzZWFzb25hbCBob21lIHJhbmdlcyBzaXplcyB2YXJpZWQgYmV0d2VlbiBlYWNoIGVudmlyb25tZW50LiBQb3N0LUhvYyBhbmFseXNlcyBvbiB0aGUgU3RvbmUgQ2FueW9uIGRhdGEgc2V0IHdpdGggaG9tZSByYW5nZSBtZWFucyBhdmVyYWdlZCBhY3Jvc3Mgc2V4LCBzdWdnZXN0ZWQgdGhhdCB0aGVyZSB3YXMgbm8gc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBob21lIHJhbmdlcyBiZXR3ZWVuIHRoZSBlbWVyZ2VuY2UgKDQuMzIgwrEgMi41NSBTLkUuIGhhKSBhbmQgcG9zdC1tb25zb29uIHNlYXNvbnMgKDUuMDkgwrEgMi4wNyBTLkUuIGhhKSBub3IgZHJ5IGFuZCBtb25zb29uICgxMi4yMyDCsSAxLjc0IFMuRS4gaGEgYW5kIDkuMDQgwrEgMS43OCBTLkUuIGhhKS4gVGhlcmUgd2FzIGFsc28gbm8gc2lnbmlmaWNhbmNlIGJldHdlZW4gZW1lcmdlbmNlIGFuZCBkcnkvbW9uc29vbiBzZWFzb25zLCBidXQgdGhlcmUgd2FzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGRyeSBhbmQgcG9zdC1tb25zb29uIChkZiA9IDgwLjIsIFAgPSAwLjA0KS4gUG9zdC1Ib2MgYW5hbHlzZXMgb24gdGhlIE93bCBIZWFkIEJ1dHRlcyBwb3B1bGF0aW9uIGluZGljYXRlZCB0aGF0IHRoZXJlIHdhcyBubyBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGJldHdlZW4gZW1lcmdlbmNlICgzLjMzIMKxIDIuMjQgUy5FLiBoYSkgYW5kIHBvc3QtbW9uc29vbiAoMi4zNiDCsSAyLjM2IFMuRS4pIG5vciBkcnkgYW5kIG1vbnNvb24gKDE4Ljg2IMKxIDIuMjUgUy5FLiBoYSBhbmQgMjEuODUgwrEgMi4wMyBTLkUuIGhhKSByZWZsZWN0aW5nIHRoZSBzYW1lIHBhdHRlcm4gYXQgU3RvbmUgQ2FueW9uLiBIb3dldmVyLCB0aGVyZSB3YXMgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGJldHdlZW4gZW1lcmdlbmNlIGFuZCBkcnkvbW9uc29vbiAoZGYgPSA2OS40LCBQID0gPDAuMDAwMSwgYW5kIGRmID0gNjgsIFAgPSA8MC4wMDAxIHJlc3BlY3RpdmVseSksIGFzIHdlbGwgYXMgcG9zdC1tb25zb29uIGFuZCBkcnkvbW9uc29vbiAoZGYgPSA3OC45LCBQID0gPDAuMDAwMSwgYW5kIGRmID0gNzQsIFAgPSA8MC4wMDAxKS4gVGhpcyBzaG93cyBhIHJhdGhlciBkaWZmZXJlbnQgcGF0dGVybiB0aGFuIHNlZW4gYXQgU3RvbmUgQ2FueW9uLiBQYWlyd2lzZSBhbmFseXNlcyBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGlvbnMgaW5kaWNhdGVkIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBlbWVyZ2VuY2UgKGRmID0gODcuNywgUCA9IDAuNzYpIG9yIHBvc3QtbW9uc29vbiAoZGYgPSA4OS40LCBQID0gMC4zNSkuIERpZmZlcmVuY2VzIGluIGhvbWUgcmFuZ2Ugc2l6ZXMgYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpb25zIHdlcmUgYmV0d2VlbiB0aGUgZHJ5IGFuZCBtb25zb29uIHNlYXNvbnMgKEZpZy5fX18pLiAgT3dsIEhlYWQgaG9tZSByYW5nZXMgd2VyZSA1OCUgbGFyZ2VyIHRoYW4gdGhvc2UgYXQgU3RvbmUgQ2FueW9uIGR1cmluZyB0aGUgZHJ5IHNlYXNvbiwgYW5kIDc2JSBsYXJnZXIgZHVyaW5nIHRoZSBtb25zb29uIHNlYXNvbi4gCiAgCgoKCgpUYWJsZSA1IHwgR3JvdXAgbWVhbnMgb2Ygc2Vhc29uYWwgaG9tZSByYW5nZXMgYmV0d2VlbiBTdG9uZSBDYW55b24gKHN1YnNpZGl6ZWQpIGFuZCBPd2wgSGVhZCBCdXR0ZXMgKG5vbi1zdWJzaWRpemVkKS4gVGhlc2UgbWVhbnMgYXJlIGF2ZXJhZ2VkIGFjcm9zcyBzZXguIApgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0Kc2Vhc29uYWw8LXJlYWQuY3N2KCJTQ19TZWFzb25hbF9EYXRhLmNzdiIpCgpsaWJyYXJ5KFJtaXNjKQoKU0VBU19HUlBfTWVhbnMgPC0gc3VtbWFyeVNFKHNlYXNvbmFsLCBtZWFzdXJldmFyPSJIb21lX1JhbmdlXzEwMG1jcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHZhcnM9YygiRW52aXJvbm1lbnQiLCJTZWFzb24iKSwgbmEucm0gPSBUUlVFKQoKIyBTRUFTX0dSUF9NZWFucwprYWJsZShTRUFTX0dSUF9NZWFucywgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnUmF3IEdyb3VwIE1lYW5zIG9mIFNlYXNvbmFsIEhvbWUgUmFuZ2VzJykKYGBgCgoKCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkocmVhZHIpCmxpYnJhcnkobG1lclRlc3QpCiMgc2Vhc29uYWw8LXJlYWQuY3N2KCJTQ19TZWFzb25hbF9EYXRhLmNzdiIpCgpSTS5tb2QuU2Vhc29uIDwtIGxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrU2Vhc29uK1NleCtOK0Vudmlyb25tZW50KlNlYXNvbisoMXxHaWxhKSwgCiAgICAgICAgICAgICAgICAgICAgICBkYXRhPXNlYXNvbmFsKQpzdW1tYXJ5KFJNLm1vZC5TZWFzb24pCgojIGFub3ZhKFJNLm1vZC5TZWFzb24pCgojICMgbWFyZ2luYWwuc2Vhc29uIDwtIGxzbWVhbnMoUk0ubW9kLlNlYXNvbiwgCiMgIyAgICAgICAgICAgICAgICAgICAgfiBFbnZpcm9ubWVudCkKIyAjIG1hcmdpbmFsLnNlYXNvbgpgYGAKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphbm92YShSTS5tb2QuU2Vhc29uKQpgYGAKCgoKCgoKClRhYmxlIDYgfCBTZWFzb25hbCBob21lIHJhbmdlIG1lYW5zIGJldHdlZW4gU3RvbmUgQ2FueW9uIChzdWJzaWRpemVkKSBhbmQgT3dsIEhlYWQgQnV0dGVzIChub24tc3Vic2lkaXplZCkgcG9wdWF0aW9ucyBmb3IgbWFsZXMgYW5kIGZlbWFsZXMuIFRoZXNlIGFyZSByYXcgbWVhbnMgYmVmb3JlIGJlaW5nIGFkanVzdGVkIGZvciBlbnZpcm9ubWVudCwgc2Vhc29uLCBzZXgsIGFuZCBzYW1wbGUgc2l6ZS4KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClNFQVNfR1JQX1RFU1QgPC0gc3VtbWFyeVNFKHNlYXNvbmFsLCBtZWFzdXJldmFyPSJIb21lX1JhbmdlXzEwMG1jcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIsIlNlYXNvbiIsIlNleCIpLCBuYS5ybSA9IFRSVUUpCgojIFNFQVNfR1JQX01lYW5zCmthYmxlKFNFQVNfR1JQX1RFU1QsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1NlYXNvbmFsIE1lYW5zIGJ5IFNleCBCZXR3ZWVuIFBvcHVsYXRpb25zJykKYGBgCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQoKcGQgPC0gcG9zaXRpb25fZG9kZ2UoMC4zKSAjIG1vdmUgdGhlbSAuMDUgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0ICgnZG9kZ2VzJykKCiMjIFRFU1QgMwpyYXcuc2Vhc29uYWw8LWdncGxvdChTRUFTX0dSUF9URVNULGFlcyh4PUVudmlyb25tZW50LCB5PUhvbWVfUmFuZ2VfMTAwbWNwLCBzaGFwZT1TZXgpKSArIAogIGdlb21fcG9pbnQoYWVzKHNoYXBlPVNleCksIHNpemUgPSAyLCBwb3NpdGlvbj1wZCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49SG9tZV9SYW5nZV8xMDBtY3Atc2UsIHltYXg9SG9tZV9SYW5nZV8xMDBtY3Arc2UpLCBwb3NpdGlvbiA9IHBkLAogICAgICAgICAgICAgICAgd2lkdGg9MC4zLCBzaXplPTAuNSwgbHR5PTEpICsgCiAgIyBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IGMoJ2JsYWNrJywncmVkJykpICsKICBmYWNldF9ncmlkKH5TZWFzb24pICsKICAjIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDgsMTkpKSsKICBsYWJzKGNhcHRpb24gPSAiRmlndXJlICB8ICBSYXcgc2Vhc29uYWwgbWVhbnMgb2Ygc2V4ZXMgYmV0d2VlbiBlYWNoIGVudmlyb25tZW50LiBIb21lIHJhbmdlcyBvZiB0aGUgc3Vic2lkZXplZCBwb3B1bGF0aW9uIHJlbWFpbiBcbiByZWxhdGl2ZWx5IHNtYWxsIHRocm91Z2hvdXQgdGhlIHNlYXNvbnMsIHdpdGggdGhlIGV4Y2VwdGlvbiBkdXJpbmcgdGhlIGRyeSBzZWFzb24gd2hlcmUgd2Ugb2JzZXJ2ZSBpbmNyZWFzZWQgbWFsZSBcbiBob21lIHJhbmdlcy4gVGhlIG5vbi1zdWJzaWRpemVkIHBvcHVsYXRpb24gZXhoaWJpdHMgYSBsYXJnZSBhbW91bnQgb2YgdmFyaWF0aW9uIGFjcm9zcyBzZWFzb25zLiIpKwogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpKwogICMgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHM9YygnRW1lcmdlbmNlJywnRHJ5JywnTW9uc29vbicsJ1Bvc3RfTW9uc29vbicpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gYyguODcsLjg1KSwgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiksCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChsaW5laGVpZ2h0PTEuNSwgZmFjZT0iYm9sZCIsIHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMC41KSwKICAgICAgICBheGlzLnRleHQueCAgPSBlbGVtZW50X3RleHQodmp1c3Q9MC41LCBzaXplPTgpLAogICAgICAgIGF4aXMudGV4dC55ICA9IGVsZW1lbnRfdGV4dCh2anVzdD0wLjUsIHNpemU9OCksCiAgICAgICAgYXhpcy50aXRsZS55ICA9IGVsZW1lbnRfdGV4dChzaXplPTEwKSwKICAgICAgICBheGlzLnRpdGxlLnggID0gZWxlbWVudF90ZXh0KHNpemU9MTApLAogICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplPTEyKSkgKwogIHhsYWIoIkVudmlyb25tZW50IikgKyB5bGFiKCJBcmVhIChoYSkgdXNpbmcgMTAwJSBNQ1AiKQpyYXcuc2Vhc29uYWwKYGBgCgoKCgoKQWRqdXN0ZWQgU2Vhc29uYWwgTWVhbnMKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyBSYXcgc2Vhc29uYWwgbWVhbnMKIyBwZCA8LSBwb3NpdGlvbl9kb2RnZSgwLjMpICMgbW92ZSB0aGVtIC4wNSB0byB0aGUgbGVmdCBhbmQgcmlnaHQgKCdkb2RnZXMnKQojIAojIyBURVNUIDMKIyByYXcuc2Vhc29uYWw8LWdncGxvdChTRUFTX0dSUF9URVNULGFlcyh4PUVudmlyb25tZW50LCB5PUhvbWVfUmFuZ2VfMTAwbWNwLCBzaGFwZT1TZXgpKSArCiMgICBnZW9tX3BvaW50KGFlcyhzaGFwZT1TZXgpLCBzaXplID0gMiwgcG9zaXRpb249cGQpICsKIyAgIGdlb21fZXJyb3JiYXIoYWVzKHltaW49SG9tZV9SYW5nZV8xMDBtY3Atc2UsIHltYXg9SG9tZV9SYW5nZV8xMDBtY3Arc2UpLCBwb3NpdGlvbiA9IHBkLAojICAgICAgICAgICAgICAgICB3aWR0aD0wLjMsIHNpemU9MC41LCBsdHk9MSkgKwojICAgIyBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IGMoJ2JsYWNrJywncmVkJykpICsKIyAgIGZhY2V0X2dyaWQoflNlYXNvbikgKwojICAgIyAjIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDgsMTkpKSsKIyAgICMgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSAgfCAgUmF3IHNlYXNvbmFsIG1lYW5zIG9mIHNleGVzIGJldHdlZW4gZWFjaCBlbnZpcm9ubWVudC4gSG9tZSByYW5nZXMgb2YgdGhlIHN1YnNpZGV6ZWQgcG9wdWxhdGlvbiByZW1haW4gXG4gcmVsYXRpdmVseSBzbWFsbCB0aHJvdWdob3V0IHRoZSBzZWFzb25zLCB3aXRoIHRoZSBleGNlcHRpb24gZHVyaW5nIHRoZSBkcnkgc2Vhc29uIHdoZXJlIHdlIG9ic2VydmUgaW5jcmVhc2VkIG1hbGUgXG4gaG9tZSByYW5nZXMuIFRoZSBub24tc3Vic2lkaXplZCBwb3B1bGF0aW9uIGV4aGliaXRzIGEgbGFyZ2UgYW1vdW50IG9mIHZhcmlhdGlvbiBhY3Jvc3Mgc2Vhc29ucy4iKSsKIyAgIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpKwojICAgIyBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cz1jKCdFbWVyZ2VuY2UnLCdEcnknLCdNb25zb29uJywnUG9zdF9Nb25zb29uJykpICsKIyAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9IGMoLjg3LC44NSksIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpLAojICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChsaW5laGVpZ2h0PTEuNSwgZmFjZT0iYm9sZCIsIHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMC41KSwKIyAgICAgICAgIGF4aXMudGV4dC54ICA9IGVsZW1lbnRfdGV4dCh2anVzdD0wLjUsIHNpemU9OCksCiMgICAgICAgICBheGlzLnRleHQueSAgPSBlbGVtZW50X3RleHQodmp1c3Q9MC41LCBzaXplPTgpLAojICAgICAgICAgYXhpcy50aXRsZS55ICA9IGVsZW1lbnRfdGV4dChzaXplPTEwKSwKIyAgICAgICAgIGF4aXMudGl0bGUueCAgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCksCiMgICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLAojICAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplPTEyKSkgKwojICAgeGxhYigiIikgKyB5bGFiKCIiKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIEFqdXN0ZWQgc2Vhc29uYWwgbWVhbnMKUk0ubW9kLlNlYXNvbiA8LSBsbWVyKEhvbWVfUmFuZ2VfMTAwbWNwfkVudmlyb25tZW50K1NlYXNvbitTZXgrTitFbnZpcm9ubWVudCpTZWFzb24rKDF8R2lsYSksCiAgICAgICAgICAgICAgICAgICAgICBkYXRhPXNlYXNvbmFsKQoKIyBSTS5tYXJnaW5hbCA8LSBsc21lYW5zKFJNLm1vZC5TZWFzb24sIAojICAgICAgICAgICAgICAgICAgICAgfiBFbnZpcm9ubWVudCkKIyBSTS5tYXJnaW5hbAoKIyMgQ0FUQUdPUklaRSBMU00gR1JBUEggQlkgU0VYIEJFVFdFRU4gRU5WSVJPTk1FTlQ6CnJlZlJNX3NlYXNvbiA8LSBsc21lYW5zKFJNLm1vZC5TZWFzb24sIHNwZWNzID0gYygiRW52aXJvbm1lbnQiLCJTZWFzb24iLCJTZXgiKSkKCiMgcmVmUk1fc2V4CnJlZl9kZlJNX3NlYXNvbiA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkocmVmUk1fc2Vhc29uKSkKcGRfUk0gPC0gcG9zaXRpb25fZG9kZ2UoMC4yKQoKYWRqLnNlYXNvbmFsPC1nZ3Bsb3QocmVmX2RmUk1fc2Vhc29uLGFlcyh4PUVudmlyb25tZW50LCB5PWxzbWVhbiwgc2hhcGU9U2V4KSkgKyAKICBnZW9tX3BvaW50KGFlcyhzaGFwZT1TZXgpLCBzaXplID0gMiwgcG9zaXRpb249cGQsIHNob3cubGVnZW5kPVRSVUUpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPWxzbWVhbi1TRSwgeW1heD1sc21lYW4rU0UpLCBwb3NpdGlvbiA9IHBkLAogICAgICAgICAgICAgICAgd2lkdGg9MC4zLCBzaXplPTAuNSwgbHR5PTEpICsgCiAgZmFjZXRfZ3JpZCh+U2Vhc29uKSArCmxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgIHwgQWRqdXN0ZWQgc2Vhc29uYWwgaG9tZSByYW5nZSBtZWFucyBvZiBzZXhlcyBiZXR3ZWVuIGVudmlyb25tZW50cy4gSG9tZSByYW5nZXMgb2YgdGhlIHN1YnNpZGV6ZWQgXG4gcG9wdWxhdGlvbiByZW1haW4gcmVsYXRpdmVseSBzbWFsbCB0aHJvdWdob3V0IHRoZSBzZWFzb25zLiBBZnRlciBhZGp1c3RtZW50IG1hbGUgaG9tZSByZWFuZ2VzIHdlcmUgcmVkdWNlZCwgXG4gYnV0IHN0aWxsIHJlbWFpbmVkIHNsaWdodGx5IGxhcmdlciB0aGVuIGZlbWFsZXMuIikrCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkrCiAgIyBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYyg4LDE5KSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gYyguODcsLjg1KSwgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiksCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChsaW5laGVpZ2h0PTEuNSwgZmFjZT0iYm9sZCIsIHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMC41KSwKICAgICAgICBheGlzLnRleHQueCAgPSBlbGVtZW50X3RleHQodmp1c3Q9MC41LCBzaXplPTgpLAogICAgICAgIGF4aXMudGV4dC55ICA9IGVsZW1lbnRfdGV4dCh2anVzdD0wLjUsIHNpemU9OCksCiAgICAgICAgYXhpcy50aXRsZS55ICA9IGVsZW1lbnRfdGV4dChzaXplPTEwKSwKICAgICAgICBheGlzLnRpdGxlLnggID0gZWxlbWVudF90ZXh0KHNpemU9MTApLAogICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplPTEyKSkgKwogIHhsYWIoIkVudmlyb25tZW50IikgKyB5bGFiKCJBcmVhIChoYSkgdXNpbmcgMTAwJSBNQ1AiKQphZGouc2Vhc29uYWwKCiMgQ29tYmluZSByYXcgYW5kIGFkanVzdGVkIHNlYXNvbmFsIGhvbWUgcmFuZ2VzIHdpdGggYSBzaW5nbGUgY2FwdGlvbjoKIyBncmlkLmFycmFuZ2UocmF3LnNlYXNvbmFsLCBhZGouc2Vhc29uYWwsIG5yb3cgPSAyLGhlaWdodHM9dW5pdChjKDIsMiksIGMoImluIiwgImluIikpLAojICAgICAgICAgICAgICBib3R0b20gPSB0ZXh0R3JvYigiIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRmYWNlID0gMSxmb250c2l6ZSA9IDEwKSxoanVzdCA9IDAsIHggPSAwKSkKCiMgbGlicmFyeShndGFibGUpCiMgZzIgPC0gZ2dwbG90R3JvYihyYXcuc2Vhc29uYWwpCiMgZzMgPC0gZ2dwbG90R3JvYihhZGouc2Vhc29uYWwpCiMgZyA8LSByYmluZChnMiwgZzMsIHNpemUgPSAiZmlyc3QiKQojIGckd2lkdGhzIDwtIHVuaXQucG1heChnMiR3aWR0aHMsIGczJHdpZHRocykKIyBncmlkLm5ld3BhZ2UoKQojIGdyaWQuZHJhdyhnKQoKYGBgCgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApQb3N0LUhvYyBjb21wYXJpc29ucyBiZXR3ZWVuIHBvcHVsYXRpb25zIGZvciBzZWFzb25hbCBob21lIHJhbmdlIGFuYWx5c2lzOgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmVtbV9zLnQgPC0gZW1tZWFucyhSTS5tb2QuU2Vhc29uLCBwYWlyd2lzZSB+IEVudmlyb25tZW50IHwgU2Vhc29uKQplbW1fcy50CmBgYAoKCkdyYXBoaWNhbCBDb21wYXJpc29ucyBvZiBzZWFzb25zIGJldHdlZW4gdGhlIHR3byBwb3B1bGF0aW5zOgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KIyBwbG90KFNleC5lbW0uc2VhcywgY29tcGFyaXNvbnMgPSBUUlVFKQpwbG90KGVtbV9zLnQsIGNvbXBhcmlzb25zID0gVFJVRSkKYGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkZpZ3VyZSAxMSB8IFBhaXJ3aXNlIGNvbXBhcmlzb25zIG9mIGVhY2ggc2Vhc29uIGJldHdlZW4gZW52aXJvbm1lbnRzLiBPdmVybGFwcGluZyByZWQgYmFycyBpbmRpY2F0ZSBubyBzdGF0aXN0aWNhbCBkaWZmZXJlbmNlLiAKCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIFNlYXMuTWVhbnNUPC1lbW1lYW5zKFJNLm1vZC5TZWFzb24sIGxpc3QocGFpcndpc2UgfiBFbnZpcm9ubWVudCwgcGFpcndpc2UgfiBTZWFzb24pKQojIFNlYXMuTWVhbnNUCgplbW1fcy50NCA8LSBlbW1lYW5zKFJNLm1vZC5TZWFzb24sIHBhaXJ3aXNlIH4gU2Vhc29uIHwgRW52aXJvbm1lbnQpCmVtbV9zLnQ0CmBgYAoKCkdyYXBoaWNhbCBDb21wYXJpc29ucyBiZXR3ZWVuIHNlYXNvbnMgd2l0aGluIHRoZSB0d28gcG9wdWxhdGlvbnM6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpwbG90KGVtbV9zLnQ0LCBjb21wYXJpc29ucyA9IFRSVUUpCmBgYApGaWd1cmUgMTIgfCBQYWlyd2lzZSBjb21wYXJpc29ucyBiZXR3ZWVuIHNlYXNvbnMgd2l0aGluIGVhY2ggZW52aXJvbm1lbnQgYWdhaW5zdCBlc3RpbWF0ZWQgbWFyZ2luYWwgbWVhbnMuIE92ZXJsYXBwaW5nIHJlZCBiYXJzIGluZGljYXRlIG5vIHN0YXRpc3RpY2FsIGRpZmZlcmVuY2UuIAoKCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0Kc3ViIDwtIHN1YnNldChzZWFzb25hbCwgRW52aXJvbm1lbnQgPT0gInN1YnNpZGl6ZWQiKQoKUk0ubW9kLlN1YiA8LSBsbWVyKEhvbWVfUmFuZ2VfMTAwbWNwflNlYXNvbitTZXgrTitTZWFzb24qU2V4KygxfEdpbGEpLCBkYXRhPXN1YikKCmVtbV9zLnQ1IDwtIGVtbWVhbnMoUk0ubW9kLlN1YiwgcGFpcndpc2UgfiBTZXggfCBTZWFzb24pCmVtbV9zLnQ1IApgYGAKCkdyYXBoaWNhbCBDb21wYXJpc29ucyBiZXR3ZWVuIHNleCB3aXRoaW4gdGhlIHN1YnNpZGl6ZWQgcG9wdWxhdGlvbjoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoZW1tX3MudDUsIGNvbXBhcmlzb25zID0gVFJVRSkKYGBgICAgCiAgIAogICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgClRhYmxlIDcgfCBNZWFuIGluZGl2aWR1YWwgc2Vhc29uYWwgaG9tZSByYW5nZXMgcG9vbGVkIGZyb20gdGhlIGVudGlyZSBzdHVkeSBwZXJpb2QuIE1pc3NpbmcgdmFsdWVzIGFyZSBkZXBpY3RlZCB3aGVyZSBubyBsb2NhdGlvbnMgZm9yIHRoYXQgYW5pbWFsIGR1cmluZyB0aGF0IHBlcmlvZCB3ZXJlIHN1Y2Nlc3NmdWxsLgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KU2Vhcy5JbmQuTWVhbnM8LXJlYWQuY3N2KCJTZWFzb25hbCBIUiBUYWJsZS5jc3YiKQprYWJsZShTZWFzLkluZC5NZWFucywgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnU2Vhc29uYWwgSW5kaXZpZHVhbCBIb21lIFJhbmdlcyAoTUNQKS4nKQpgYGAKCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0Kbm9uc3ViIDwtIHN1YnNldChzZWFzb25hbCwgRW52aXJvbm1lbnQgPT0gIm5vbnN1YnNpZGl6ZWQiKQoKUk0ubW9kLk5TdWIgPC0gbG1lcihIb21lX1JhbmdlXzEwMG1jcH5TZWFzb24rU2V4K04rU2Vhc29uKlNleCsoMXxHaWxhKSwgZGF0YT1ub25zdWIpCgplbW1fcy50NiA8LSBlbW1lYW5zKFJNLm1vZC5OU3ViLCBwYWlyd2lzZSB+IFNleCB8IFNlYXNvbikKZW1tX3MudDYgCmBgYAoKR3JhcGhpY2FsIENvbXBhcmlzb25zIGJldHdlZW4gc2V4IHdpdGhpbiB0aGUgbm9uLXN1YnNpZGl6ZWQgcG9wdWxhdGlvbjoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoZW1tX3MudDYsIGNvbXBhcmlzb25zID0gVFJVRSkKYGBgICAgCgoKCgoKIyMgU2Vhc29uYWwgSG9tZSBSYW5nZSAoS0RFKQoKClRhYmxlICB8IFJhdyBLREUgZ3JvdXAgbWVhbnMgb2Ygc2Vhc29uYWwgaG9tZSByYW5nZXMgYmV0d2VlbiBzZXhlcyBhdCBTdG9uZSBDYW55b24gKHN1YnNpZGl6ZWQpLgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0Kc2Vhc29uLmtkZTwtcmVhZC5jc3YoIlNDX1NlYXNvbmFsX0lucHV0LmNzdiIpCgpTRUFTX0tERV9TZXggPC0gc3VtbWFyeVNFKHNlYXNvbi5rZGUsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfOTVrZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoIlNlYXNvbiIsIlNleCIpLCBuYS5ybSA9IFRSVUUpCgojIFNFQVNfR1JQX01lYW5zCmthYmxlKFNFQVNfS0RFX1NleCwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnUmF3IEtERSBHcm91cCBNZWFucyBvZiBTZWFzb25hbCBIb21lIFJhbmdlcyBiZXR3ZWVuIHNleGVzJykKYGBgCgogCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpTRUFTX0tERV9NZWFucyA8LSBzdW1tYXJ5U0Uoc2Vhc29uLmtkZSwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV85NWtkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHZhcnM9YygiU2Vhc29uIiksIG5hLnJtID0gVFJVRSkKCiMgU0VBU19HUlBfTWVhbnMKa2FibGUoU0VBU19LREVfTWVhbnMsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1JhdyBLREUgR3JvdXAgTWVhbnMgb2YgU2Vhc29uYWwgSG9tZSBSYW5nZXMnKQpgYGAKIAogCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIHNlYXNvbmFsPC1yZWFkLmNzdigiU0NfU2Vhc29uYWxfRGF0YS5jc3YiKQoKUk0uS0RFLlNlYXNvbiA8LSBsbWVyKEhvbWVfUmFuZ2VfOTVrZGV+U2Vhc29uK1NleCtOK1NlYXNvbipTZXgrKDF8R2lsYSksIAogICAgICAgICAgICAgICAgICAgICAgZGF0YT1zZWFzb24ua2RlKQpzdW1tYXJ5KFJNLktERS5TZWFzb24pCmBgYAogCkFOT1ZBIFRhYmxlLiBTZWFzb25hbCBLREUKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmFub3ZhKFJNLktERS5TZWFzb24pCmBgYAoKIAoKUmF3IFNlYXNvbmFsIEtERSBNZWFucwpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KZ2dwbG90KFNFQVNfS0RFX1NleCxhZXMoeD1TZXgsIHk9SG9tZV9SYW5nZV85NWtkZSkpICsgCiAgZ2VvbV9wb2ludChzaXplID0gMiwgcG9zaXRpb249cGQpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUhvbWVfUmFuZ2VfOTVrZGUtc2UsIHltYXg9SG9tZV9SYW5nZV85NWtkZStzZSksIHBvc2l0aW9uID0gcGQsCiAgICAgICAgICAgICAgICB3aWR0aD0wLjMsIHNpemU9MC41LCBsdHk9MSkgKyAKICBmYWNldF9ncmlkKH5TZWFzb24pICsKICB0aGVtZV9idygpICsKICB4bGFiKCJTZXgiKSArIHlsYWIoIkFyZWEgKGhhKSB1c2luZyA5NSUgS0RFIikKYGBgCgoKCgoKQWRqdXN0ZWQgU2Vhc29uYWwgS0RFIE1lYW5zCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpSTS5LREUuU2Vhc29uIDwtIGxtZXIoSG9tZV9SYW5nZV85NWtkZX5TZWFzb24rU2V4K04rU2Vhc29uKlNleCsoMXxHaWxhKSwgCiAgICAgICAgICAgICAgICAgICAgICBkYXRhPXNlYXNvbi5rZGUpCgojIFJNLm1hcmdpbmFsIDwtIGxzbWVhbnMoUk0ubW9kLlNlYXNvbiwgCiMgICAgICAgICAgICAgICAgICAgICB+IEVudmlyb25tZW50KQojIFJNLm1hcmdpbmFsCgojIyBDQVRBR09SSVpFIExTTSBHUkFQSCBCWSBTRVggQkVUV0VFTiBFTlZJUk9OTUVOVDoKcmVmUk1fS0RFIDwtIGxzbWVhbnMoUk0uS0RFLlNlYXNvbiwgc3BlY3MgPSBjKCJTZWFzb24iLCJTZXgiKSkKCiMgcmVmUk1fc2V4CnJlZl9kZlJNX0tERSA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkocmVmUk1fS0RFKSkKcGRfUk0gPC0gcG9zaXRpb25fZG9kZ2UoMC4yKQoKZ2dwbG90KHJlZl9kZlJNX0tERSxhZXMoeD1TZXgsIHk9bHNtZWFuKSkgKyAKICBnZW9tX3BvaW50KHNpemUgPSAyLCBwb3NpdGlvbj1wZCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49bHNtZWFuLVNFLCB5bWF4PWxzbWVhbitTRSksIHBvc2l0aW9uID0gcGQsCiAgICAgICAgICAgICAgICB3aWR0aD0wLjMsIHNpemU9MC41LCBsdHk9MSkgKyAKICBmYWNldF9ncmlkKH5TZWFzb24pICsKICB4bGFiKCJTZXgiKSArIHlsYWIoIkFyZWEgKGhhKSB1c2luZyA5NSUgS0RFIikKYGBgCgogCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KZW1tX3NleF9LREUgPC0gZW1tZWFucyhSTS5LREUuU2Vhc29uLCBwYWlyd2lzZSB+IFNleCB8IFNlYXNvbikKZW1tX3NleF9LREUgCmBgYAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoZW1tX3NleF9LREUsIGNvbXBhcmlzb25zPVRSVUUpCmBgYAoKCgoKCgojIEhvbWUgUmFuZ2UgT3ZlcmxhcCAoTUNQKQoKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5HaWxhIE1vbnN0ZXIgSG9tZSBSYW5nZSBPdmVybGFwIG9mIDEwMCUgTUNQcy48L3NwYW4+CgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KCm1jcF9hbmFseXNpcy5QT0xZIDwtIGZ1bmN0aW9uKGZpbGVuYW1lLCBwZXJjZW50YWdlKXsKICBkYXRhIDwtIHJlYWQuY3N2KGZpbGUgPSBmaWxlbmFtZSxzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCiAgZGF0YS5zcCA8LSBkYXRhWywgYygiTElaQVJETlVNQkVSIiwgIkVBU1RJTkciLCAiTk9SVEhJTkciKV0KICBjb29yZGluYXRlcyhkYXRhLnNwKSA8LSBjKCJFQVNUSU5HIiwgIk5PUlRISU5HIikKICBwcm9qNHN0cmluZyhkYXRhLnNwKSA8LSBDUlMuU0MKICBtY3Bfb3V0IDwtIG1jcChkYXRhLnNwLCBwZXJjZW50YWdlLCB1bm91dD0iaGEiKQp9CgpNNjdfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NNjcvTTY3IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk02OV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL002OS9NNjkgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTI1NV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00yNTUvTTI1NSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNMjE1X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vTTIxNS9NMjE1IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk0xNF9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00xNC9NMTQgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00xMTkvTTExOSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNMTEyX01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vTTExMi9NMTEyIC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCgpGNjZfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GNjYvRjY2IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYzNl9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YzNi9GMzYgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjI1Ml9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YyNTIvRjI1MiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMjE0X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjIxNC9GMjE0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYyMDBfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMjAwL0YyMDAgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxNDcvRjE0NyAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTQ2X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjE0Ni9GMTQ2IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTM3L0YxMzcgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzNV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxMzUvRjEzNSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTE0X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjExNC9GMTE0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxMDRfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTA0L0YxMDQgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKCk1hbGUuTUNQIDwtIHJiaW5kKE02N19NQ1AsTTY5X01DUCxNMjU1X01DUCxNMjE1X01DUCxNMTRfTUNQLE0xMTlfTUNQLE0xMTJfTUNQKQpGZW1hbGUuTUNQIDwtIHJiaW5kKEY2Nl9NQ1AsRjM2X01DUCxGMjUyX01DUCxGMjE0X01DUCxGMjAwX01DUCxGMTQ3X01DUCxGMTQ2X01DUCxGMTM3X01DUCwKICAgICAgICAgICAgICAgICAgICBGMTM1X01DUCxGMTE0X01DUCxGMTA0X01DUCkKCm1hcHZpZXdPcHRpb25zKGJhc2VtYXBzID0gYygiT3BlblN0cmVldE1hcCIsIkVzcmkuV29ybGRJbWFnZXJ5IiwiT3BlblRvcG9NYXAiKSwKICAgICAgICAgICAgICAgbmEuY29sb3IgPSAibWFnZW50YSIsCiAgICAgICAgICAgICAgIGxheWVycy5jb250cm9sLnBvcyA9ICJ0b3BsZWZ0IikKCm1hcHZpZXcoTWFsZS5NQ1AsIGxlZ2VuZD1GLCB6Y29sPSJpZCIsIGNvbC5yZWdpb25zID0gYygiYmx1ZSIpLCBhbHBoYS5yZWdpb25zPTAuMykgKyAKICBtYXB2aWV3KEZlbWFsZS5NQ1AsIGxlZ2VuZD1GLCB6Y29sID0gImlkIiwgY29sLnJlZ2lvbnMgPSBjKCJyZWQiKSwgYWxwaGEucmVnaW9ucz0wLjMpCmBgYApGaWd1cmUgMTMgfCBJbnRlcmFjdGl2ZSBtYXA6IEhvbWUgUmFuZ2Ugb3ZlcmxhcCBieSBzZXggb2YgMTAwJSBNQ1BzIGF0IFN0b25lIENhbnlvbi4gUmVkIHBvbHlnb25zIHJlcHJlc2VudCBmZW1hbGUgbGl6YXJkcywgYW5kIGJsdWUgcmVwcmVzZW50cyBtYWxlIGxpemFyZHMuIAoKCgoKClRoZSBTdG9uZSBDYW55b24gcG9wdWxhdGlvbiBzZWVtcyB0byBleGhpYml0IGdyZWF0ZXIgZmVtYWxlLWZlbWFsZSBvdmVybGFwIGFzIHdlbGwgYXMgY29uc2lkZXJhYmxlIG92ZXJsYXAgb2YgbWFsZS1mZW1hbGUgaG9tZSByYW5nZXMuIFRoZXJlIGFwcGVhcnMgdG8gYmUgbGltaXRlZCBtYWxlLW1hbGUgb3ZlcmxhcCwgd2l0aCBvY2N1cmFuY2UgaGFwcGVuaW5nIGluIG9ubHkgdHdvIG1hbGUtbWFsZSBob21lIHJhbmdlIHBvbHlnb25zLiBUaGlzIGZpbmRpbmcgaXMgaW4gY29udHJhc3QgdG8gdGhlIE93bCBIZWFkIGJ1dHRlcyBzdHVkeSB3aGljaCByZXZlYWxlZCB0aGF0IHRoZXJlIHdhcyBhIGxhcmdlIGRlZ3JlZSBvZiBvdmVybGFwIGFtb25nIG1hbGUtZmVtYWxlIGFuZCBtYWxlLW1hbGUgb3ZlcmxhcHMgKFRhYmxlIHgpLiBHaWxsYXJkbyBjb25jbHVkZWQgdGhhdCwgaW4gdGhlaXIgc3R1ZHksIHRoZSBoaWdoIGRlZ3JlZSBvZiBvdmVybGFwIGluIG1hbGVzLW1hbGVzIGludGVyYWN0aW9ucyBtYXkgYmUgZHVlIHRvIGhhdmluZyBsYXJnZXIgaG9tZSByYW5nZXMgZm9yIG1hdGUgc2VhcmNoaW5nIGFjdGl2aXRpZXMuIE1hbGVzIG1heSBoYXZlIGFuZCBpbmNyZWFzZWQgaG9tZSByYW5nZSBzaXplIHRvIG1heGltaXplIHRoZWlyIGFjY2VzcyB0byBtdWx0aXBsZSBmZW1hbGVzLiBTaGUgY29uY2x1ZGVkIHRoYXQgdGhlIGxhY2sgb2YgZmVtYWxlLWZlbWFsZSBvdmVybGFwIG1heSBiZSBkdWUgdG8gc21hbGxlciBob21lIHJhbmdlIHNpemVzLiAKCkF0IFN0b25lIENhbnlvbiwgbWFsZXMgaGF2ZSByZWR1Y2VkIGhvbWUgcmFuZ2Ugc2l6ZXMgKFRhYmxlIDY7IEZpZy4gNCkuIEhvd2V2ZXIsIG1hbGVzIHN0aWxsIHJldGFpbiBob21lIHJhbmdlIG92ZXJsYXAgd2l0aCBtdWx0aXBsZSBmZW1hbGVzIHdoaWxlIGhhdmluZyByZWR1Y2VkIGNvbnRhY3Qgd2l0aCBvdGhlciBtYWxlcy4gVGhpcyBtYXkgYmUgaW4gcmVzcG9uc2UgdG8gbnV0cmllbnQgc3Vic2lkaWVzIHRoYXQgcmVkdWNlIHRoZSBuZWVkIHRvIGhhdmUgZXhwYW5kZWQgaG9tZSByYW5nZSBzaXplcyBmb3IgZm9yYWdpbmcgYWN0aXZpdGllcyBmb3IgYm90aCBtYWxlcyBhbmQgZmVtYWxlcy4gVGhlcmUgbWF5IGFsc28gYmUgYSBoaWdoZXIgZGVuc2l0eSBvZiBmZW1hbGVzIGFzIGEgcmVzcG9uc2UgdG8gcmVzb3VyY2UgYXZhaWxhYmlsaXR5IGFuZCByZWR1Y2VkIHJhbmdlIHJlcXVpcmVtZW50cy4gTWFsZXMgYXJlIG5vdCBmb3JjZWQgdG8gZXhwYW5kIGhvbWUgcmFuZ2VzIGZvciBtYXRlIHNlYXJjaGluZyB0byB0aGUgZXh0YW50IHRoYXQgaW5kaXZpZHVhbHMgYXQgT3dsIEhlYWQgQnV0dGVzIG1heSBiZSBzdWJqZWN0IHRvLiAKCgoKVGFibGUgOCB8IEhvbWUgcmFuZ2Ugb3ZlcmxhcCBvZiBHaWxhIE1vbnN0ZXJzIGF0IHRoZSBudXRyaWVudCBzdWJzaWRpemVkIHNpdGUuIE1hbGUtbWFsZSBvdmVybGFwcyBvbmx5IG9jY3VyZWQgYmV0d2VlbiB0d28gcGFpcnMgb2YgbWFsZXM6IE0xNC1NNjkgYW5kIE0xMTktTTIxNSBhdCAwLjUgaGEuIGFuZCAxOS41IGhhLiByZXNwZWN0aXZlbHkgYW5kIHdlcmUgdGhlcmVmb3JlIG5vdCBpbmNsdWRlZCBpbiB0aGUgdGFibGUuIApgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KT0xfVGFibGU8LXJlYWQuY3N2KCIuL092ZXJsYXAvT3ZlckxhcF9UYWJsZS5jc3YiKQoKa2FibGUoT0xfVGFibGUsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ0hvbWUgcmFuZ2Ugb3ZlcmxhcCBvZiBTdG9uZSBDYW55b24gR2lsYSBNb25zdGVycyB1c2luZyAxMDAlIE1DUHMuJykKYGBgCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpoci5vdmVybGFwPC1yZWFkLmNzdigiLi9PdmVybGFwL0hSX092ZXJsYXBfRGF0YS5jc3YiKQoKaHIub3ZlcmxhcC5hbmFsIDwtIHN1bW1hcnlTRShoci5vdmVybGFwLCBtZWFzdXJldmFyPSJPTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHZhcnM9YygiSW50ZXJhY3Rpb24iKSwgbmEucm0gPSBUUlVFKQoKIyBTRUFTX0dSUF9NZWFucwprYWJsZShoci5vdmVybGFwLmFuYWwsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ0hvbWUgUmFuZ2UgT3ZlcmxhcCBTdW1tYXJ5JykKYGBgCgoKCgojIEhvbWUgUmFuZ2UgT3ZlcmxhcCAoS0RFKQoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQoKa2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbiA8LSBmdW5jdGlvbihmaWxlbmFtZSwgcGVyY2VudGFnZSl7CiAgZGF0YSA8LSByZWFkLmNzdihmaWxlID0gZmlsZW5hbWUsc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQogIGRhdGEuc3AgPC0gZGF0YVssIGMoIkxJWkFSRE5VTUJFUiIsICJFQVNUSU5HIiwgIk5PUlRISU5HIildCiAgY29vcmRpbmF0ZXMoZGF0YS5zcCkgPC0gYygiRUFTVElORyIsICJOT1JUSElORyIpCiAgcHJvajRzdHJpbmcoZGF0YS5zcCkgPC0gQ1JTLlNDCiAga2RlPC1rZXJuZWxVRChkYXRhLnNwLCBoPSJocmVmIiwga2Vybj0iYml2bm9ybSIsIGdyaWQ9MTAwMCkKICB2ZXIgPC0gZ2V0dmVydGljZXNocihrZGUsIHBlcmNlbnRhZ2UpCiAgdmVyQHByb2o0c3RyaW5nPC1DUlMuU0MKICB2ZXIKfQoKTTY3X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9NNjcvTTY3IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTY5X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9NNjkvTTY5IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTI1NV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTI1NS9NMjU1IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTIxNV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTIxNS9NMjE1IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTE0X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9NMTQvTTE0IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTExOV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTExOS9NMTE5IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTExMl9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTExMi9NMTEyIC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKCkY2Nl9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vRjY2L0Y2NiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYzNl9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vRjM2L0YzNiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYyNTJfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YyNTIvRjI1MiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYyMTRfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YyMTQvRjIxNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYyMDBfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YyMDAvRjIwMCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxNDdfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxNDcvRjE0NyAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxNDZfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxNDYvRjE0NiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMzdfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMzcvRjEzNyAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMzVfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMzUvRjEzNSAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMTRfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMTQvRjExNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMDRfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMDQvRjEwNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCgpNYWxlLktERSA8LSByYmluZChNNjdfS0RFLE02OV9LREUsTTI1NV9LREUsTTIxNV9LREUsTTE0X0tERSxNMTE5X0tERSxNMTEyX0tERSkKRmVtYWxlLktERSA8LSByYmluZChGNjZfS0RFLEYzNl9LREUsRjI1Ml9LREUsRjIxNF9LREUsRjIwMF9LREUsRjE0N19LREUsRjE0Nl9LREUsRjEzN19LREUsCiAgICAgICAgICAgICAgICAgICAgRjEzNV9LREUsRjExNF9LREUsRjEwNF9LREUpCgptYXB2aWV3T3B0aW9ucyhiYXNlbWFwcyA9IGMoIk9wZW5TdHJlZXRNYXAiLCJFc3JpLldvcmxkSW1hZ2VyeSIsIk9wZW5Ub3BvTWFwIiksCiAgICAgICAgICAgICAgIG5hLmNvbG9yID0gIm1hZ2VudGEiLAogICAgICAgICAgICAgICBsYXllcnMuY29udHJvbC5wb3MgPSAidG9wbGVmdCIpCgptYXB2aWV3KE1hbGUuS0RFLCBsZWdlbmQ9RiwgemNvbD0iaWQiLCBjb2wucmVnaW9ucyA9IGMoImJsdWUiKSwgYWxwaGEucmVnaW9ucz0wLjMpICsgCiAgbWFwdmlldyhGZW1hbGUuS0RFLCBsZWdlbmQ9RiwgemNvbCA9ICJpZCIsIGNvbC5yZWdpb25zID0gYygicmVkIiksIGFscGhhLnJlZ2lvbnM9MC4zKQpgYGAKRmlndXJlIDE0IHwgSW50ZXJhY3RpdmUgbWFwOiBIb21lIFJhbmdlIG92ZXJsYXAgYnkgc2V4IG9mIDk1JSBLREVzIGF0IFN0b25lIENhbnlvbi4gUmVkIHBvbHlnb25zIHJlcHJlc2VudCBmZW1hbGUgbGl6YXJkcywgYW5kIGJsdWUgcmVwcmVzZW50cyBtYWxlIGxpemFyZHMuIAoKCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1UUlVFfQoKIyBrZGVfYW5hbHlzaXMuaHJlZi5yYXN0ZXIgPC0gZnVuY3Rpb24oZmlsZW5hbWUpewojICAgZGF0YSA8LSByZWFkLmNzdihmaWxlID0gZmlsZW5hbWUpCiMgICB4IDwtIGFzLmRhdGEuZnJhbWUoZGF0YSRFQVNUSU5HKQojICAgeSA8LSBhcy5kYXRhLmZyYW1lKGRhdGEkTk9SVEhJTkcpCiMgICB4eSA8LSBjKHgseSkKIyAgIGRhdGEucHJvaiA8LSBTcGF0aWFsUG9pbnRzRGF0YUZyYW1lKHh5LGRhdGEsIHByb2o0c3RyaW5nID0gQ1JTLlNDKQojICAgeHkgPC0gU3BhdGlhbFBvaW50cyhkYXRhLnByb2pAY29vcmRzKQojICAga2RlPC1rZXJuZWxVRCh4eSwgaD0iaHJlZiIsIGtlcm49ImJpdm5vcm0iLCBncmlkPTEwMDApCiMgICBrZGVAcHJvajRzdHJpbmc8LSBDUlMuU0MKIyAgIGtkZQojIH0KCk0xMTIucmFzdGVyLm91dHB1dDwta2RlX2FuYWx5c2lzLmhyZWYucmFzdGVyKCIuL00xMTIvTTExMiAuY3N2IikKRjExNC5yYXN0ZXIub3V0cHV0PC1rZGVfYW5hbHlzaXMuaHJlZi5yYXN0ZXIoIi4vRjExNC9GMTE0IC5jc3YiKQpGMjAwLnJhc3Rlci5vdXRwdXQ8LWtkZV9hbmFseXNpcy5ocmVmLnJhc3RlcigiLi9GMjAwL0YyMDAgLmNzdiIpCiMgcGxvdChNMTEyLnJhc3Rlci5vdXRwdXQpCiMgbWFwdmlldyhNMTEyLnJhc3Rlci5vdXRwdXQsIGFscGhhLnJlZ2lvbnM9MC44KQoKTTExMi5yYXN0ZXI8LXJhc3RlcihNMTEyLnJhc3Rlci5vdXRwdXQpCkYxMTQucmFzdGVyPC1yYXN0ZXIoRjExNC5yYXN0ZXIub3V0cHV0KQpGMjAwLnJhc3RlcjwtcmFzdGVyKEYyMDAucmFzdGVyLm91dHB1dCkKCgpsaWJyYXJ5KHRtYXApCiMgY3JlYXRlcyBhIGJvdW5kaW5nIGJveCBiYXNlZCBvbiB0aGUgZXh0ZW50cyBvZiB0aGUgcG9seWdvbgojYm91bmRpbmdfYm94IDwtIGJiKE91dHB1dC5BcmVhcykKTTExMi5iYiA8LSBNMTEyX0tERUBiYm94CkYxMTQuYmIgPC0gRjExNF9LREVAYmJveApGMjAwLmJiIDwtIEYyMDBfS0RFQGJib3gKCgojIG1hcHMgdGhlIHJhc3RlciB3aXRoaW4gdGhlIGJvdW5kaW5nIGJveAojIHRtX3NoYXBlKE0xMTIucmFzdGVyLCBiYm94ID0gTTExMi5iYikgKyB0bV9yYXN0ZXIoInVkIikKCiMgbWFzayB0aGUgcmFzdGVyIGJ5IHRoZSBvdXRwdXQgYXJlYSBwb2x5Z29uCk0xMTIubWFza2VkIDwtIG1hc2soTTExMi5yYXN0ZXIsIE0xMTJfS0RFKQojIE0xMTIubWFza2VkW2lzLm5hKE0xMTIubWFza2VkKV0gPC0gMApGMTE0Lm1hc2tlZCA8LSBtYXNrKEYxMTQucmFzdGVyLCBGMTE0X0tERSkKIyBGMTE0Lm1hc2tlZFtpcy5uYShGMTE0Lm1hc2tlZCldIDwtIDAKRjIwMC5tYXNrZWQgPC0gbWFzayhGMjAwLnJhc3RlciwgRjIwMF9LREUpCiMgRjIwMC5tYXNrZWRbaXMubmEoRjIwMC5tYXNrZWQpXSA8LSAwCgpwbG90KE0xMTIubWFza2VkKQojIG1hcHZpZXcoTTExMi5tYXNrZWQsIGFscGhhLnJlZ2lvbnM9MC42KQoKdG1fbGF5b3V0KG1haW4udGl0bGU9Ik0xMTIgRjExNCBhbmQgRjIwMCBLREUgT3ZlcmxhcCIpK3RtX3NoYXBlKE0xMTIubWFza2VkKSArCiAgdG1fcmFzdGVyKCJ1ZCIsIHN0eWxlID0gInF1YW50aWxlIiwgbiA9IDEwMCwgbGVnZW5kLnNob3cgPSBGQUxTRSwgcGFsZXR0ZSA9ICItWWxHbkJ1IikgKwogIHRtX3NoYXBlKEYxMTQubWFza2VkKSArIAogIHRtX3Jhc3RlcigidWQiLCBzdHlsZSA9ICJxdWFudGlsZSIsIG4gPSAxMDAsIGxlZ2VuZC5zaG93ID0gRkFMU0UsIHBhbGV0dGUgPSAiLVlsR25CdSIpICsKICB0bV9zaGFwZShGMjAwLm1hc2tlZCkgKwogIHRtX3Jhc3RlcigidWQiLCBzdHlsZSA9ICJxdWFudGlsZSIsIG4gPSAxMDAsIGxlZ2VuZC5zaG93ID0gRkFMU0UsIHBhbGV0dGUgPSAiLVlsR25CdSIpICsKICB0bV9zaGFwZShNMTEyX0tERSkgKyAKICB0bV9ib3JkZXJzKGFscGhhPS4zLCBjb2wgPSAiYmxhY2siKSArIAogIHRtX3NoYXBlKEYxMTRfS0RFKSArIAogIHRtX2JvcmRlcnMoYWxwaGE9LjMsIGNvbCA9ICJibGFjayIpICsgCiAgdG1fc2hhcGUoRjIwMF9LREUpICsgCiAgdG1fYm9yZGVycyhhbHBoYT0uMywgY29sID0gImJsYWNrIikgKwogIHRtX2xheW91dChmcmFtZSA9IEZBTFNFKQogIAojICwgYmJveCA9IE0xMTIuYmIKIyBjb21wdXRlIGhvbWVyYW5nZXMgZm9yIDUwJSwgOTUlIG9mIHBvaW50cywgb2JqZWN0cyBhcmUgcmV0dXJuZWQgYXMgc3BhdGlhbCBwb2x5Z29uIGRhdGEgZnJhbWVzCk0xMTIucmFuZ2U5NSA8LSBnZXR2ZXJ0aWNlc2hyKE0xMTIucmFzdGVyLm91dHB1dCwgcGVyY2VudCA9IDk1KQpNMTEyLnJhbmdlNTAgPC0gZ2V0dmVydGljZXNocihNMTEyLnJhc3Rlci5vdXRwdXQsIHBlcmNlbnQgPSA1MCkKRjExNC5yYW5nZTk1IDwtIGdldHZlcnRpY2VzaHIoRjExNC5yYXN0ZXIub3V0cHV0LCBwZXJjZW50ID0gOTUpCkYxMTQucmFuZ2U1MCA8LSBnZXR2ZXJ0aWNlc2hyKEYxMTQucmFzdGVyLm91dHB1dCwgcGVyY2VudCA9IDUwKQpGMjAwLnJhbmdlOTUgPC0gZ2V0dmVydGljZXNocihGMjAwLnJhc3Rlci5vdXRwdXQsIHBlcmNlbnQgPSA5NSkKRjIwMC5yYW5nZTUwIDwtIGdldHZlcnRpY2VzaHIoRjIwMC5yYXN0ZXIub3V0cHV0LCBwZXJjZW50ID0gNTApCgp0bV9sYXlvdXQobWFpbi50aXRsZT0iTTExMiBGMTE0IGFuZCBGMjAwIEtERSBPdmVybGFwIikrCnRtX3NoYXBlKE0xMTIucmFuZ2U5NSkgKyAKICB0bV9ib3JkZXJzKGFscGhhPS43LCBjb2wgPSAiI2ZiNmE0YSIsIGx3ZCA9IDIpICsgdG1fZmlsbChhbHBoYT0uMSwgY29sID0gIiNmYjZhNGEiKSArCnRtX3NoYXBlKE0xMTIucmFuZ2U1MCkgKyB0bV9ib3JkZXJzKGFscGhhPS43LCBjb2wgPSAiI2RlMmQyNiIsIGx3ZCA9IDIpICsgdG1fZmlsbChhbHBoYT0uMSwgY29sID0gIiNkZTJkMjYiKSArCnRtX2xheW91dChmcmFtZSA9IEZBTFNFKSArCnRtX3NoYXBlKEYxMTQucmFuZ2U5NSkgKyB0bV9ib3JkZXJzKGFscGhhPS43LCBjb2wgPSAiI2ZiNmE0YSIsIGx3ZCA9IDIpICsgdG1fZmlsbChhbHBoYT0uMSwgY29sID0gIiNmYjZhNGEiKSArCnRtX3NoYXBlKEYxMTQucmFuZ2U1MCkgKyB0bV9ib3JkZXJzKGFscGhhPS43LCBjb2wgPSAiI2RlMmQyNiIsIGx3ZCA9IDIpICsgdG1fZmlsbChhbHBoYT0uMSwgY29sID0gIiNkZTJkMjYiKSArCnRtX2xheW91dChmcmFtZSA9IEZBTFNFKSArIAp0bV9zaGFwZShGMjAwLnJhbmdlOTUpICsgdG1fYm9yZGVycyhhbHBoYT0uNywgY29sID0gIiNmYjZhNGEiLCBsd2QgPSAyKSArIHRtX2ZpbGwoYWxwaGE9LjEsIGNvbCA9ICIjZmI2YTRhIikgKwp0bV9zaGFwZShGMjAwLnJhbmdlNTApICsgdG1fYm9yZGVycyhhbHBoYT0uNywgY29sID0gIiNkZTJkMjYiLCBsd2QgPSAyKSArIHRtX2ZpbGwoYWxwaGE9LjEsIGNvbCA9ICIjZGUyZDI2IikgKwp0bV9sYXlvdXQoZnJhbWUgPSBGQUxTRSkKCiMjIHdyaXRlIHJhc3RlciBmaWxlcyB0byBjb21wdXRlcjogCiMgd3JpdGVSYXN0ZXIobWFza2VkX2tkZSwgZmlsZW5hbWUgPSAia2VybmVsX2RlbnNpdHkudGlmIikKYGBgCgoKCgo=